function css_browser_selector(a) {
        var b = a.toLowerCase(),
            d = function(a) {
                return b.indexOf(a) > -1
            },
            e = "gecko",
            f = "webkit",
            g = "safari",
            h = "opera",
            i = "mobile",
            j = document.documentElement,
            k = [!/opera|webtv/i.test(b) && /msie\s(\d)/.test(b) ? "ie ie" + RegExp.$1 : d("firefox/2") ? e + " ff2" : d("firefox/3.5") ? e + " ff3 ff3_5" : d("firefox/3.6") ? e + " ff3 ff3_6" : d("firefox/3") ? e + " ff3" : d("gecko/") ? e : d("opera") ? h + (/version\/(\d+)/.test(b) ? " " + h + RegExp.$1 : /opera(\s|\/)(\d+)/.test(b) ? " " + h + RegExp.$2 : "") : d("konqueror") ? "konqueror" : d("blackberry") ? i + " blackberry" : d("android") ? i + " android" : d("chrome") ? f + " chrome" : d("iron") ? f + " iron" : d("applewebkit/") ? f + " " + g + (/version\/(\d+)/.test(b) ? " " + g + RegExp.$1 : "") : d("mozilla/") ? e : "", d("j2me") ? i + " j2me" : d("iphone") ? i + " iphone" : d("ipod") ? i + " ipod" : d("ipad") ? i + " ipad" : d("mac") ? "mac" : d("darwin") ? "mac" : d("webtv") ? "webtv" : d("win") ? "win" + (d("windows nt 6.0") ? " vista" : "") : d("freebsd") ? "freebsd" : d("x11") || d("linux") ? "linux" : "", "js"];
        return c = k.join(" "), j.className += " " + c, c
    }! function(a, b) {
        function c(a) {
            var b = ob[a] = {};
            return $.each(a.split(bb), function(a, c) {
                b[c] = !0
            }), b
        }

        function d(a, c, d) {
            if (d === b && 1 === a.nodeType) {
                var e = "data-" + c.replace(qb, "-$1").toLowerCase();
                if (d = a.getAttribute(e), "string" == typeof d) {
                    try {
                        d = "true" === d ? !0 : "false" === d ? !1 : "null" === d ? null : +d + "" === d ? +d : pb.test(d) ? $.parseJSON(d) : d
                    } catch (f) {}
                    $.data(a, c, d)
                } else d = b
            }
            return d
        }

        function e(a) {
            var b;
            for (b in a)
                if (("data" !== b || !$.isEmptyObject(a[b])) && "toJSON" !== b) return !1;
            return !0
        }

        function f() {
            return !1
        }

        function g() {
            return !0
        }

        function h(a) {
            return !a || !a.parentNode || 11 === a.parentNode.nodeType
        }

        function i(a, b) {
            do a = a[b]; while (a && 1 !== a.nodeType);
            return a
        }

        function j(a, b, c) {
            if (b = b || 0, $.isFunction(b)) return $.grep(a, function(a, d) {
                var e = !!b.call(a, d, a);
                return e === c
            });
            if (b.nodeType) return $.grep(a, function(a) {
                return a === b === c
            });
            if ("string" == typeof b) {
                var d = $.grep(a, function(a) {
                    return 1 === a.nodeType
                });
                if (Kb.test(b)) return $.filter(b, d, !c);
                b = $.filter(b, d)
            }
            return $.grep(a, function(a) {
                return $.inArray(a, b) >= 0 === c
            })
        }

        function k(a) {
            var b = Nb.split("|"),
                c = a.createDocumentFragment();
            if (c.createElement)
                for (; b.length;) c.createElement(b.pop());
            return c
        }

        function l(a, b) {
            return a.getElementsByTagName(b)[0] || a.appendChild(a.ownerDocument.createElement(b))
        }

        function m(a, b) {
            if (1 === b.nodeType && $.hasData(a)) {
                var c, d, e, f = $._data(a),
                    g = $._data(b, f),
                    h = f.events;
                if (h) {
                    delete g.handle, g.events = {};
                    for (c in h)
                        for (d = 0, e = h[c].length; e > d; d++) $.event.add(b, c, h[c][d])
                }
                g.data && (g.data = $.extend({}, g.data))
            }
        }

        function n(a, b) {
            var c;
            1 === b.nodeType && (b.clearAttributes && b.clearAttributes(), b.mergeAttributes && b.mergeAttributes(a), c = b.nodeName.toLowerCase(), "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), $.support.html5Clone && a.innerHTML && !$.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && Xb.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.selected = a.defaultSelected : "input" === c || "textarea" === c ? b.defaultValue = a.defaultValue : "script" === c && b.text !== a.text && (b.text = a.text), b.removeAttribute($.expando))
        }

        function o(a) {
            return "undefined" != typeof a.getElementsByTagName ? a.getElementsByTagName("*") : "undefined" != typeof a.querySelectorAll ? a.querySelectorAll("*") : []
        }

        function p(a) {
            Xb.test(a.type) && (a.defaultChecked = a.checked)
        }

        function q(a, b) {
            if (b in a) return b;
            for (var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = rc.length; e--;)
                if (b = rc[e] + c, b in a) return b;
            return d
        }

        function r(a, b) {
            return a = b || a, "none" === $.css(a, "display") || !$.contains(a.ownerDocument, a)
        }

        function s(a, b) {
            for (var c, d, e = [], f = 0, g = a.length; g > f; f++) c = a[f], c.style && (e[f] = $._data(c, "olddisplay"), b ? (e[f] || "none" !== c.style.display || (c.style.display = ""), "" === c.style.display && r(c) && (e[f] = $._data(c, "olddisplay", w(c.nodeName)))) : (d = cc(c, "display"), e[f] || "none" === d || $._data(c, "olddisplay", d)));
            for (f = 0; g > f; f++) c = a[f], c.style && (b && "none" !== c.style.display && "" !== c.style.display || (c.style.display = b ? e[f] || "" : "none"));
            return a
        }

        function t(a, b, c) {
            var d = kc.exec(b);
            return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
        }

        function u(a, b, c, d) {
            for (var e = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, f = 0; 4 > e; e += 2) "margin" === c && (f += $.css(a, c + qc[e], !0)), d ? ("content" === c && (f -= parseFloat(cc(a, "padding" + qc[e])) || 0), "margin" !== c && (f -= parseFloat(cc(a, "border" + qc[e] + "Width")) || 0)) : (f += parseFloat(cc(a, "padding" + qc[e])) || 0, "padding" !== c && (f += parseFloat(cc(a, "border" + qc[e] + "Width")) || 0));
            return f
        }

        function v(a, b, c) {
            var d = "width" === b ? a.offsetWidth : a.offsetHeight,
                e = !0,
                f = $.support.boxSizing && "border-box" === $.css(a, "boxSizing");
            if (0 >= d || null == d) {
                if (d = cc(a, b), (0 > d || null == d) && (d = a.style[b]), lc.test(d)) return d;
                e = f && ($.support.boxSizingReliable || d === a.style[b]), d = parseFloat(d) || 0
            }
            return d + u(a, b, c || (f ? "border" : "content"), e) + "px"
        }

        function w(a) {
            if (nc[a]) return nc[a];
            var b = $("<" + a + ">").appendTo(P.body),
                c = b.css("display");
            return b.remove(), ("none" === c || "" === c) && (dc = P.body.appendChild(dc || $.extend(P.createElement("iframe"), {
                frameBorder: 0,
                width: 0,
                height: 0
            })), ec && dc.createElement || (ec = (dc.contentWindow || dc.contentDocument).document, ec.write("<!doctype html><html><body>"), ec.close()), b = ec.body.appendChild(ec.createElement(a)), c = cc(b, "display"), P.body.removeChild(dc)), nc[a] = c, c
        }

        function x(a, b, c, d) {
            var e;
            if ($.isArray(b)) $.each(b, function(b, e) {
                c || uc.test(a) ? d(a, e) : x(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
            });
            else if (c || "object" !== $.type(b)) d(a, b);
            else
                for (e in b) x(a + "[" + e + "]", b[e], c, d)
        }

        function y(a) {
            return function(b, c) {
                "string" != typeof b && (c = b, b = "*");
                var d, e, f, g = b.toLowerCase().split(bb),
                    h = 0,
                    i = g.length;
                if ($.isFunction(c))
                    for (; i > h; h++) d = g[h], f = /^\+/.test(d), f && (d = d.substr(1) || "*"), e = a[d] = a[d] || [], e[f ? "unshift" : "push"](c)
            }
        }

        function z(a, c, d, e, f, g) {
            f = f || c.dataTypes[0], g = g || {}, g[f] = !0;
            for (var h, i = a[f], j = 0, k = i ? i.length : 0, l = a === Kc; k > j && (l || !h); j++) h = i[j](c, d, e), "string" == typeof h && (!l || g[h] ? h = b : (c.dataTypes.unshift(h), h = z(a, c, d, e, h, g)));
            return !l && h || g["*"] || (h = z(a, c, d, e, "*", g)), h
        }

        function A(a, c) {
            var d, e, f = $.ajaxSettings.flatOptions || {};
            for (d in c) c[d] !== b && ((f[d] ? a : e || (e = {}))[d] = c[d]);
            e && $.extend(!0, a, e)
        }

        function B(a, c, d) {
            var e, f, g, h, i = a.contents,
                j = a.dataTypes,
                k = a.responseFields;
            for (f in k) f in d && (c[k[f]] = d[f]);
            for (;
                "*" === j[0];) j.shift(), e === b && (e = a.mimeType || c.getResponseHeader("content-type"));
            if (e)
                for (f in i)
                    if (i[f] && i[f].test(e)) {
                        j.unshift(f);
                        break
                    }
            if (j[0] in d) g = j[0];
            else {
                for (f in d) {
                    if (!j[0] || a.converters[f + " " + j[0]]) {
                        g = f;
                        break
                    }
                    h || (h = f)
                }
                g = g || h
            }
            return g ? (g !== j[0] && j.unshift(g), d[g]) : void 0
        }

        function C(a, b) {
            var c, d, e, f, g = a.dataTypes.slice(),
                h = g[0],
                i = {},
                j = 0;
            if (a.dataFilter && (b = a.dataFilter(b, a.dataType)), g[1])
                for (c in a.converters) i[c.toLowerCase()] = a.converters[c];
            for (; e = g[++j];)
                if ("*" !== e) {
                    if ("*" !== h && h !== e) {
                        if (c = i[h + " " + e] || i["* " + e], !c)
                            for (d in i)
                                if (f = d.split(" "), f[1] === e && (c = i[h + " " + f[0]] || i["* " + f[0]])) {
                                    c === !0 ? c = i[d] : i[d] !== !0 && (e = f[0], g.splice(j--, 0, e));
                                    break
                                }
                        if (c !== !0)
                            if (c && a["throws"]) b = c(b);
                            else try {
                                b = c(b)
                            } catch (k) {
                                return {
                                    state: "parsererror",
                                    error: c ? k : "No conversion from " + h + " to " + e
                                }
                            }
                    }
                    h = e
                }
            return {
                state: "success",
                data: b
            }
        }

        function D() {
            try {
                return new a.XMLHttpRequest
            } catch (b) {}
        }

        function E() {
            try {
                return new a.ActiveXObject("Microsoft.XMLHTTP")
            } catch (b) {}
        }

        function F() {
            return setTimeout(function() {
                Vc = b
            }, 0), Vc = $.now()
        }

        function G(a, b) {
            $.each(b, function(b, c) {
                for (var d = (_c[b] || []).concat(_c["*"]), e = 0, f = d.length; f > e; e++)
                    if (d[e].call(a, b, c)) return
            })
        }

        function H(a, b, c) {
            var d, e = 0,
                f = $c.length,
                g = $.Deferred().always(function() {
                    delete h.elem
                }),
                h = function() {
                    for (var b = Vc || F(), c = Math.max(0, i.startTime + i.duration - b), d = c / i.duration || 0, e = 1 - d, f = 0, h = i.tweens.length; h > f; f++) i.tweens[f].run(e);
                    return g.notifyWith(a, [i, e, c]), 1 > e && h ? c : (g.resolveWith(a, [i]), !1)
                },
                i = g.promise({
                    elem: a,
                    props: $.extend({}, b),
                    opts: $.extend(!0, {
                        specialEasing: {}
                    }, c),
                    originalProperties: b,
                    originalOptions: c,
                    startTime: Vc || F(),
                    duration: c.duration,
                    tweens: [],
                    createTween: function(b, c) {
                        var d = $.Tween(a, i.opts, b, c, i.opts.specialEasing[b] || i.opts.easing);
                        return i.tweens.push(d), d
                    },
                    stop: function(b) {
                        for (var c = 0, d = b ? i.tweens.length : 0; d > c; c++) i.tweens[c].run(1);
                        return b ? g.resolveWith(a, [i, b]) : g.rejectWith(a, [i, b]), this
                    }
                }),
                j = i.props;
            for (I(j, i.opts.specialEasing); f > e; e++)
                if (d = $c[e].call(i, a, j, i.opts)) return d;
            return G(i, j), $.isFunction(i.opts.start) && i.opts.start.call(a, i), $.fx.timer($.extend(h, {
                anim: i,
                queue: i.opts.queue,
                elem: a
            })), i.progress(i.opts.progress).done(i.opts.done, i.opts.complete).fail(i.opts.fail).always(i.opts.always)
        }

        function I(a, b) {
            var c, d, e, f, g;
            for (c in a)
                if (d = $.camelCase(c), e = b[d], f = a[c], $.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = $.cssHooks[d], g && "expand" in g) {
                    f = g.expand(f), delete a[d];
                    for (c in f) c in a || (a[c] = f[c], b[c] = e)
                } else b[d] = e
        }

        function J(a, b, c) {
            var d, e, f, g, h, i, j, k, l, m = this,
                n = a.style,
                o = {},
                p = [],
                q = a.nodeType && r(a);
            c.queue || (k = $._queueHooks(a, "fx"), null == k.unqueued && (k.unqueued = 0, l = k.empty.fire, k.empty.fire = function() {
                k.unqueued || l()
            }), k.unqueued++, m.always(function() {
                m.always(function() {
                    k.unqueued--, $.queue(a, "fx").length || k.empty.fire()
                })
            })), 1 === a.nodeType && ("height" in b || "width" in b) && (c.overflow = [n.overflow, n.overflowX, n.overflowY], "inline" === $.css(a, "display") && "none" === $.css(a, "float") && ($.support.inlineBlockNeedsLayout && "inline" !== w(a.nodeName) ? n.zoom = 1 : n.display = "inline-block")), c.overflow && (n.overflow = "hidden", $.support.shrinkWrapBlocks || m.done(function() {
                n.overflow = c.overflow[0], n.overflowX = c.overflow[1], n.overflowY = c.overflow[2]
            }));
            for (d in b)
                if (f = b[d], Xc.exec(f)) {
                    if (delete b[d], i = i || "toggle" === f, f === (q ? "hide" : "show")) continue;
                    p.push(d)
                }
            if (g = p.length) {
                h = $._data(a, "fxshow") || $._data(a, "fxshow", {}), "hidden" in h && (q = h.hidden), i && (h.hidden = !q), q ? $(a).show() : m.done(function() {
                    $(a).hide()
                }), m.done(function() {
                    var b;
                    $.removeData(a, "fxshow", !0);
                    for (b in o) $.style(a, b, o[b])
                });
                for (d = 0; g > d; d++) e = p[d], j = m.createTween(e, q ? h[e] : 0), o[e] = h[e] || $.style(a, e), e in h || (h[e] = j.start, q && (j.end = j.start, j.start = "width" === e || "height" === e ? 1 : 0))
            }
        }

        function K(a, b, c, d, e) {
            return new K.prototype.init(a, b, c, d, e)
        }

        function L(a, b) {
            var c, d = {
                    height: a
                },
                e = 0;
            for (b = b ? 1 : 0; 4 > e; e += 2 - b) c = qc[e], d["margin" + c] = d["padding" + c] = a;
            return b && (d.opacity = d.width = a), d
        }

        function M(a) {
            return $.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
        }
        var N, O, P = a.document,
            Q = a.location,
            R = a.navigator,
            S = a.jQuery,
            T = a.$,
            U = Array.prototype.push,
            V = Array.prototype.slice,
            W = Array.prototype.indexOf,
            X = Object.prototype.toString,
            Y = Object.prototype.hasOwnProperty,
            Z = String.prototype.trim,
            $ = function(a, b) {
                return new $.fn.init(a, b, N)
            },
            _ = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
            ab = /\S/,
            bb = /\s+/,
            cb = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
            db = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
            eb = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
            fb = /^[\],:{}\s]*$/,
            gb = /(?:^|:|,)(?:\s*\[)+/g,
            hb = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
            ib = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
            jb = /^-ms-/,
            kb = /-([\da-z])/gi,
            lb = function(a, b) {
                return (b + "").toUpperCase()
            },
            mb = function() {
                P.addEventListener ? (P.removeEventListener("DOMContentLoaded", mb, !1), $.ready()) : "complete" === P.readyState && (P.detachEvent("onreadystatechange", mb), $.ready())
            },
            nb = {};
        $.fn = $.prototype = {
            constructor: $,
            init: function(a, c, d) {
                var e, f, g;
                if (!a) return this;
                if (a.nodeType) return this.context = this[0] = a, this.length = 1, this;
                if ("string" == typeof a) {
                    if (e = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : db.exec(a), !e || !e[1] && c) return !c || c.jquery ? (c || d).find(a) : this.constructor(c).find(a);
                    if (e[1]) return c = c instanceof $ ? c[0] : c, g = c && c.nodeType ? c.ownerDocument || c : P, a = $.parseHTML(e[1], g, !0), eb.test(e[1]) && $.isPlainObject(c) && this.attr.call(a, c, !0), $.merge(this, a);
                    if (f = P.getElementById(e[2]), f && f.parentNode) {
                        if (f.id !== e[2]) return d.find(a);
                        this.length = 1, this[0] = f
                    }
                    return this.context = P, this.selector = a, this
                }
                return $.isFunction(a) ? d.ready(a) : (a.selector !== b && (this.selector = a.selector, this.context = a.context), $.makeArray(a, this))
            },
            selector: "",
            jquery: "1.8.3",
            length: 0,
            size: function() {
                return this.length
            },
            toArray: function() {
                return V.call(this)
            },
            get: function(a) {
                return null == a ? this.toArray() : 0 > a ? this[this.length + a] : this[a]
            },
            pushStack: function(a, b, c) {
                var d = $.merge(this.constructor(), a);
                return d.prevObject = this, d.context = this.context, "find" === b ? d.selector = this.selector + (this.selector ? " " : "") + c : b && (d.selector = this.selector + "." + b + "(" + c + ")"), d
            },
            each: function(a, b) {
                return $.each(this, a, b)
            },
            ready: function(a) {
                return $.ready.promise().done(a), this
            },
            eq: function(a) {
                return a = +a, -1 === a ? this.slice(a) : this.slice(a, a + 1)
            },
            first: function() {
                return this.eq(0)
            },
            last: function() {
                return this.eq(-1)
            },
            slice: function() {
                return this.pushStack(V.apply(this, arguments), "slice", V.call(arguments).join(","))
            },
            map: function(a) {
                return this.pushStack($.map(this, function(b, c) {
                    return a.call(b, c, b)
                }))
            },
            end: function() {
                return this.prevObject || this.constructor(null)
            },
            push: U,
            sort: [].sort,
            splice: [].splice
        }, $.fn.init.prototype = $.fn, $.extend = $.fn.extend = function() {
            var a, c, d, e, f, g, h = arguments[0] || {},
                i = 1,
                j = arguments.length,
                k = !1;
            for ("boolean" == typeof h && (k = h, h = arguments[1] || {}, i = 2), "object" == typeof h || $.isFunction(h) || (h = {}), j === i && (h = this, --i); j > i; i++)
                if (null != (a = arguments[i]))
                    for (c in a) d = h[c], e = a[c], h !== e && (k && e && ($.isPlainObject(e) || (f = $.isArray(e))) ? (f ? (f = !1, g = d && $.isArray(d) ? d : []) : g = d && $.isPlainObject(d) ? d : {}, h[c] = $.extend(k, g, e)) : e !== b && (h[c] = e));
            return h
        }, $.extend({
            noConflict: function(b) {
                return a.$ === $ && (a.$ = T), b && a.jQuery === $ && (a.jQuery = S), $
            },
            isReady: !1,
            readyWait: 1,
            holdReady: function(a) {
                a ? $.readyWait++ : $.ready(!0)
            },
            ready: function(a) {
                if (a === !0 ? !--$.readyWait : !$.isReady) {
                    if (!P.body) return setTimeout($.ready, 1);
                    $.isReady = !0, a !== !0 && --$.readyWait > 0 || (O.resolveWith(P, [$]), $.fn.trigger && $(P).trigger("ready").off("ready"))
                }
            },
            isFunction: function(a) {
                return "function" === $.type(a)
            },
            isArray: Array.isArray || function(a) {
                return "array" === $.type(a)
            },
            isWindow: function(a) {
                return null != a && a == a.window
            },
            isNumeric: function(a) {
                return !isNaN(parseFloat(a)) && isFinite(a)
            },
            type: function(a) {
                return null == a ? String(a) : nb[X.call(a)] || "object"
            },
            isPlainObject: function(a) {
                if (!a || "object" !== $.type(a) || a.nodeType || $.isWindow(a)) return !1;
                try {
                    if (a.constructor && !Y.call(a, "constructor") && !Y.call(a.constructor.prototype, "isPrototypeOf")) return !1
                } catch (c) {
                    return !1
                }
                var d;
                for (d in a);
                return d === b || Y.call(a, d)
            },
            isEmptyObject: function(a) {
                var b;
                for (b in a) return !1;
                return !0
            },
            error: function(a) {
                throw new Error(a)
            },
            parseHTML: function(a, b, c) {
                var d;
                return a && "string" == typeof a ? ("boolean" == typeof b && (c = b, b = 0), b = b || P, (d = eb.exec(a)) ? [b.createElement(d[1])] : (d = $.buildFragment([a], b, c ? null : []), $.merge([], (d.cacheable ? $.clone(d.fragment) : d.fragment).childNodes))) : null
            },
            parseJSON: function(b) {
                return b && "string" == typeof b ? (b = $.trim(b), a.JSON && a.JSON.parse ? a.JSON.parse(b) : fb.test(b.replace(hb, "@").replace(ib, "]").replace(gb, "")) ? new Function("return " + b)() : ($.error("Invalid JSON: " + b), void 0)) : null
            },
            parseXML: function(c) {
                var d, e;
                if (!c || "string" != typeof c) return null;
                try {
                    a.DOMParser ? (e = new DOMParser, d = e.parseFromString(c, "text/xml")) : (d = new ActiveXObject("Microsoft.XMLDOM"), d.async = "false", d.loadXML(c))
                } catch (f) {
                    d = b
                }
                return d && d.documentElement && !d.getElementsByTagName("parsererror").length || $.error("Invalid XML: " + c), d
            },
            noop: function() {},
            globalEval: function(b) {
                b && ab.test(b) && (a.execScript || function(b) {
                    a.eval.call(a, b)
                })(b)
            },
            camelCase: function(a) {
                return a.replace(jb, "ms-").replace(kb, lb)
            },
            nodeName: function(a, b) {
                return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
            },
            each: function(a, c, d) {
                var e, f = 0,
                    g = a.length,
                    h = g === b || $.isFunction(a);
                if (d)
                    if (h) {
                        for (e in a)
                            if (c.apply(a[e], d) === !1) break
                    } else
                        for (; g > f && c.apply(a[f++], d) !== !1;);
                else if (h) {
                    for (e in a)
                        if (c.call(a[e], e, a[e]) === !1) break
                } else
                    for (; g > f && c.call(a[f], f, a[f++]) !== !1;);
                return a
            },
            trim: Z && !Z.call("﻿ ") ? function(a) {
                return null == a ? "" : Z.call(a)
            } : function(a) {
                return null == a ? "" : (a + "").replace(cb, "")
            },
            makeArray: function(a, b) {
                var c, d = b || [];
                return null != a && (c = $.type(a), null == a.length || "string" === c || "function" === c || "regexp" === c || $.isWindow(a) ? U.call(d, a) : $.merge(d, a)), d
            },
            inArray: function(a, b, c) {
                var d;
                if (b) {
                    if (W) return W.call(b, a, c);
                    for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)
                        if (c in b && b[c] === a) return c
                }
                return -1
            },
            merge: function(a, c) {
                var d = c.length,
                    e = a.length,
                    f = 0;
                if ("number" == typeof d)
                    for (; d > f; f++) a[e++] = c[f];
                else
                    for (; c[f] !== b;) a[e++] = c[f++];
                return a.length = e, a
            },
            grep: function(a, b, c) {
                var d, e = [],
                    f = 0,
                    g = a.length;
                for (c = !!c; g > f; f++) d = !!b(a[f], f), c !== d && e.push(a[f]);
                return e
            },
            map: function(a, c, d) {
                var e, f, g = [],
                    h = 0,
                    i = a.length,
                    j = a instanceof $ || i !== b && "number" == typeof i && (i > 0 && a[0] && a[i - 1] || 0 === i || $.isArray(a));
                if (j)
                    for (; i > h; h++) e = c(a[h], h, d), null != e && (g[g.length] = e);
                else
                    for (f in a) e = c(a[f], f, d), null != e && (g[g.length] = e);
                return g.concat.apply([], g)
            },
            guid: 1,
            proxy: function(a, c) {
                var d, e, f;
                return "string" == typeof c && (d = a[c], c = a, a = d), $.isFunction(a) ? (e = V.call(arguments, 2), f = function() {
                    return a.apply(c, e.concat(V.call(arguments)))
                }, f.guid = a.guid = a.guid || $.guid++, f) : b
            },
            access: function(a, c, d, e, f, g, h) {
                var i, j = null == d,
                    k = 0,
                    l = a.length;
                if (d && "object" == typeof d) {
                    for (k in d) $.access(a, c, k, d[k], 1, g, e);
                    f = 1
                } else if (e !== b) {
                    if (i = h === b && $.isFunction(e), j && (i ? (i = c, c = function(a, b, c) {
                            return i.call($(a), c)
                        }) : (c.call(a, e), c = null)), c)
                        for (; l > k; k++) c(a[k], d, i ? e.call(a[k], k, c(a[k], d)) : e, h);
                    f = 1
                }
                return f ? a : j ? c.call(a) : l ? c(a[0], d) : g
            },
            now: function() {
                return (new Date).getTime()
            }
        }), $.ready.promise = function(b) {
            if (!O)
                if (O = $.Deferred(), "complete" === P.readyState) setTimeout($.ready, 1);
                else if (P.addEventListener) P.addEventListener("DOMContentLoaded", mb, !1), a.addEventListener("load", $.ready, !1);
            else {
                P.attachEvent("onreadystatechange", mb), a.attachEvent("onload", $.ready);
                var c = !1;
                try {
                    c = null == a.frameElement && P.documentElement
                } catch (d) {}
                c && c.doScroll && ! function e() {
                    if (!$.isReady) {
                        try {
                            c.doScroll("left")
                        } catch (a) {
                            return setTimeout(e, 50)
                        }
                        $.ready()
                    }
                }()
            }
            return O.promise(b)
        }, $.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(a, b) {
            nb["[object " + b + "]"] = b.toLowerCase()
        }), N = $(P);
        var ob = {};
        $.Callbacks = function(a) {
            a = "string" == typeof a ? ob[a] || c(a) : $.extend({}, a);
            var d, e, f, g, h, i, j = [],
                k = !a.once && [],
                l = function(b) {
                    for (d = a.memory && b, e = !0, i = g || 0, g = 0, h = j.length, f = !0; j && h > i; i++)
                        if (j[i].apply(b[0], b[1]) === !1 && a.stopOnFalse) {
                            d = !1;
                            break
                        }
                    f = !1, j && (k ? k.length && l(k.shift()) : d ? j = [] : m.disable())
                },
                m = {
                    add: function() {
                        if (j) {
                            var b = j.length;
                            ! function c(b) {
                                $.each(b, function(b, d) {
                                    var e = $.type(d);
                                    "function" === e ? a.unique && m.has(d) || j.push(d) : d && d.length && "string" !== e && c(d)
                                })
                            }(arguments), f ? h = j.length : d && (g = b, l(d))
                        }
                        return this
                    },
                    remove: function() {
                        return j && $.each(arguments, function(a, b) {
                            for (var c;
                                (c = $.inArray(b, j, c)) > -1;) j.splice(c, 1), f && (h >= c && h--, i >= c && i--)
                        }), this
                    },
                    has: function(a) {
                        return $.inArray(a, j) > -1
                    },
                    empty: function() {
                        return j = [], this
                    },
                    disable: function() {
                        return j = k = d = b, this
                    },
                    disabled: function() {
                        return !j
                    },
                    lock: function() {
                        return k = b, d || m.disable(), this
                    },
                    locked: function() {
                        return !k
                    },
                    fireWith: function(a, b) {
                        return b = b || [], b = [a, b.slice ? b.slice() : b], !j || e && !k || (f ? k.push(b) : l(b)), this
                    },
                    fire: function() {
                        return m.fireWith(this, arguments), this
                    },
                    fired: function() {
                        return !!e
                    }
                };
            return m
        }, $.extend({
            Deferred: function(a) {
                var b = [
                        ["resolve", "done", $.Callbacks("once memory"), "resolved"],
                        ["reject", "fail", $.Callbacks("once memory"), "rejected"],
                        ["notify", "progress", $.Callbacks("memory")]
                    ],
                    c = "pending",
                    d = {
                        state: function() {
                            return c
                        },
                        always: function() {
                            return e.done(arguments).fail(arguments), this
                        },
                        then: function() {
                            var a = arguments;
                            return $.Deferred(function(c) {
                                $.each(b, function(b, d) {
                                    var f = d[0],
                                        g = a[b];
                                    e[d[1]]($.isFunction(g) ? function() {
                                        var a = g.apply(this, arguments);
                                        a && $.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f + "With"](this === e ? c : this, [a])
                                    } : c[f])
                                }), a = null
                            }).promise()
                        },
                        promise: function(a) {
                            return null != a ? $.extend(a, d) : d
                        }
                    },
                    e = {};
                return d.pipe = d.then, $.each(b, function(a, f) {
                    var g = f[2],
                        h = f[3];
                    d[f[1]] = g.add, h && g.add(function() {
                        c = h
                    }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = g.fire, e[f[0] + "With"] = g.fireWith
                }), d.promise(e), a && a.call(e, e), e
            },
            when: function(a) {
                var b, c, d, e = 0,
                    f = V.call(arguments),
                    g = f.length,
                    h = 1 !== g || a && $.isFunction(a.promise) ? g : 0,
                    i = 1 === h ? a : $.Deferred(),
                    j = function(a, c, d) {
                        return function(e) {
                            c[a] = this, d[a] = arguments.length > 1 ? V.call(arguments) : e, d === b ? i.notifyWith(c, d) : --h || i.resolveWith(c, d)
                        }
                    };
                if (g > 1)
                    for (b = new Array(g), c = new Array(g), d = new Array(g); g > e; e++) f[e] && $.isFunction(f[e].promise) ? f[e].promise().done(j(e, d, f)).fail(i.reject).progress(j(e, c, b)) : --h;
                return h || i.resolveWith(d, f), i.promise()
            }
        }), $.support = function() {
            var b, c, d, e, f, g, h, i, j, k, l, m = P.createElement("div");
            if (m.setAttribute("className", "t"), m.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", c = m.getElementsByTagName("*"), d = m.getElementsByTagName("a")[0], !c || !d || !c.length) return {};
            e = P.createElement("select"), f = e.appendChild(P.createElement("option")), g = m.getElementsByTagName("input")[0], d.style.cssText = "top:1px;float:left;opacity:.5", b = {
                leadingWhitespace: 3 === m.firstChild.nodeType,
                tbody: !m.getElementsByTagName("tbody").length,
                htmlSerialize: !!m.getElementsByTagName("link").length,
                style: /top/.test(d.getAttribute("style")),
                hrefNormalized: "/a" === d.getAttribute("href"),
                opacity: /^0.5/.test(d.style.opacity),
                cssFloat: !!d.style.cssFloat,
                checkOn: "on" === g.value,
                optSelected: f.selected,
                getSetAttribute: "t" !== m.className,
                enctype: !!P.createElement("form").enctype,
                html5Clone: "<:nav></:nav>" !== P.createElement("nav").cloneNode(!0).outerHTML,
                boxModel: "CSS1Compat" === P.compatMode,
                submitBubbles: !0,
                changeBubbles: !0,
                focusinBubbles: !1,
                deleteExpando: !0,
                noCloneEvent: !0,
                inlineBlockNeedsLayout: !1,
                shrinkWrapBlocks: !1,
                reliableMarginRight: !0,
                boxSizingReliable: !0,
                pixelPosition: !1
            }, g.checked = !0, b.noCloneChecked = g.cloneNode(!0).checked, e.disabled = !0, b.optDisabled = !f.disabled;
            try {
                delete m.test
            } catch (n) {
                b.deleteExpando = !1
            }
            if (!m.addEventListener && m.attachEvent && m.fireEvent && (m.attachEvent("onclick", l = function() {
                    b.noCloneEvent = !1
                }), m.cloneNode(!0).fireEvent("onclick"), m.detachEvent("onclick", l)), g = P.createElement("input"), g.value = "t", g.setAttribute("type", "radio"), b.radioValue = "t" === g.value, g.setAttribute("checked", "checked"), g.setAttribute("name", "t"), m.appendChild(g), h = P.createDocumentFragment(), h.appendChild(m.lastChild), b.checkClone = h.cloneNode(!0).cloneNode(!0).lastChild.checked, b.appendChecked = g.checked, h.removeChild(g), h.appendChild(m), m.attachEvent)
                for (j in {
                        submit: !0,
                        change: !0,
                        focusin: !0
                    }) i = "on" + j, k = i in m, k || (m.setAttribute(i, "return;"), k = "function" == typeof m[i]), b[j + "Bubbles"] = k;
            return $(function() {
                var c, d, e, f, g = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
                    h = P.getElementsByTagName("body")[0];
                h && (c = P.createElement("div"), c.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", h.insertBefore(c, h.firstChild), d = P.createElement("div"), c.appendChild(d), d.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", e = d.getElementsByTagName("td"), e[0].style.cssText = "padding:0;margin:0;border:0;display:none", k = 0 === e[0].offsetHeight, e[0].style.display = "", e[1].style.display = "none", b.reliableHiddenOffsets = k && 0 === e[0].offsetHeight, d.innerHTML = "", d.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", b.boxSizing = 4 === d.offsetWidth, b.doesNotIncludeMarginInBodyOffset = 1 !== h.offsetTop, a.getComputedStyle && (b.pixelPosition = "1%" !== (a.getComputedStyle(d, null) || {}).top, b.boxSizingReliable = "4px" === (a.getComputedStyle(d, null) || {
                    width: "4px"
                }).width, f = P.createElement("div"), f.style.cssText = d.style.cssText = g, f.style.marginRight = f.style.width = "0", d.style.width = "1px", d.appendChild(f), b.reliableMarginRight = !parseFloat((a.getComputedStyle(f, null) || {}).marginRight)), "undefined" != typeof d.style.zoom && (d.innerHTML = "", d.style.cssText = g + "width:1px;padding:1px;display:inline;zoom:1", b.inlineBlockNeedsLayout = 3 === d.offsetWidth, d.style.display = "block", d.style.overflow = "visible", d.innerHTML = "<div></div>", d.firstChild.style.width = "5px", b.shrinkWrapBlocks = 3 !== d.offsetWidth, c.style.zoom = 1), h.removeChild(c), c = d = e = f = null)
            }), h.removeChild(m), c = d = e = f = g = h = m = null, b
        }();
        var pb = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
            qb = /([A-Z])/g;
        $.extend({
            cache: {},
            deletedIds: [],
            uuid: 0,
            expando: "jQuery" + ($.fn.jquery + Math.random()).replace(/\D/g, ""),
            noData: {
                embed: !0,
                object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
                applet: !0
            },
            hasData: function(a) {
                return a = a.nodeType ? $.cache[a[$.expando]] : a[$.expando], !!a && !e(a)
            },
            data: function(a, c, d, e) {
                if ($.acceptData(a)) {
                    var f, g, h = $.expando,
                        i = "string" == typeof c,
                        j = a.nodeType,
                        k = j ? $.cache : a,
                        l = j ? a[h] : a[h] && h;
                    if (l && k[l] && (e || k[l].data) || !i || d !== b) return l || (j ? a[h] = l = $.deletedIds.pop() || $.guid++ : l = h), k[l] || (k[l] = {}, j || (k[l].toJSON = $.noop)), ("object" == typeof c || "function" == typeof c) && (e ? k[l] = $.extend(k[l], c) : k[l].data = $.extend(k[l].data, c)), f = k[l], e || (f.data || (f.data = {}), f = f.data), d !== b && (f[$.camelCase(c)] = d), i ? (g = f[c], null == g && (g = f[$.camelCase(c)])) : g = f, g
                }
            },
            removeData: function(a, b, c) {
                if ($.acceptData(a)) {
                    var d, f, g, h = a.nodeType,
                        i = h ? $.cache : a,
                        j = h ? a[$.expando] : $.expando;
                    if (i[j]) {
                        if (b && (d = c ? i[j] : i[j].data)) {
                            $.isArray(b) || (b in d ? b = [b] : (b = $.camelCase(b), b = b in d ? [b] : b.split(" ")));
                            for (f = 0, g = b.length; g > f; f++) delete d[b[f]];
                            if (!(c ? e : $.isEmptyObject)(d)) return
                        }(c || (delete i[j].data, e(i[j]))) && (h ? $.cleanData([a], !0) : $.support.deleteExpando || i != i.window ? delete i[j] : i[j] = null)
                    }
                }
            },
            _data: function(a, b, c) {
                return $.data(a, b, c, !0)
            },
            acceptData: function(a) {
                var b = a.nodeName && $.noData[a.nodeName.toLowerCase()];
                return !b || b !== !0 && a.getAttribute("classid") === b
            }
        }), $.fn.extend({
            data: function(a, c) {
                var e, f, g, h, i, j = this[0],
                    k = 0,
                    l = null;
                if (a === b) {
                    if (this.length && (l = $.data(j), 1 === j.nodeType && !$._data(j, "parsedAttrs"))) {
                        for (g = j.attributes, i = g.length; i > k; k++) h = g[k].name, h.indexOf("data-") || (h = $.camelCase(h.substring(5)), d(j, h, l[h]));
                        $._data(j, "parsedAttrs", !0)
                    }
                    return l
                }
                return "object" == typeof a ? this.each(function() {
                    $.data(this, a)
                }) : (e = a.split(".", 2), e[1] = e[1] ? "." + e[1] : "", f = e[1] + "!", $.access(this, function(c) {
                    return c === b ? (l = this.triggerHandler("getData" + f, [e[0]]), l === b && j && (l = $.data(j, a), l = d(j, a, l)), l === b && e[1] ? this.data(e[0]) : l) : (e[1] = c, this.each(function() {
                        var b = $(this);
                        b.triggerHandler("setData" + f, e), $.data(this, a, c), b.triggerHandler("changeData" + f, e)
                    }), void 0)
                }, null, c, arguments.length > 1, null, !1))
            },
            removeData: function(a) {
                return this.each(function() {
                    $.removeData(this, a)
                })
            }
        }), $.extend({
            queue: function(a, b, c) {
                var d;
                return a ? (b = (b || "fx") + "queue", d = $._data(a, b), c && (!d || $.isArray(c) ? d = $._data(a, b, $.makeArray(c)) : d.push(c)), d || []) : void 0
            },
            dequeue: function(a, b) {
                b = b || "fx";
                var c = $.queue(a, b),
                    d = c.length,
                    e = c.shift(),
                    f = $._queueHooks(a, b),
                    g = function() {
                        $.dequeue(a, b)
                    };
                "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
            },
            _queueHooks: function(a, b) {
                var c = b + "queueHooks";
                return $._data(a, c) || $._data(a, c, {
                    empty: $.Callbacks("once memory").add(function() {
                        $.removeData(a, b + "queue", !0), $.removeData(a, c, !0)
                    })
                })
            }
        }), $.fn.extend({
            queue: function(a, c) {
                var d = 2;
                return "string" != typeof a && (c = a, a = "fx", d--), arguments.length < d ? $.queue(this[0], a) : c === b ? this : this.each(function() {
                    var b = $.queue(this, a, c);
                    $._queueHooks(this, a), "fx" === a && "inprogress" !== b[0] && $.dequeue(this, a)
                })
            },
            dequeue: function(a) {
                return this.each(function() {
                    $.dequeue(this, a)
                })
            },
            delay: function(a, b) {
                return a = $.fx ? $.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function(b, c) {
                    var d = setTimeout(b, a);
                    c.stop = function() {
                        clearTimeout(d)
                    }
                })
            },
            clearQueue: function(a) {
                return this.queue(a || "fx", [])
            },
            promise: function(a, c) {
                var d, e = 1,
                    f = $.Deferred(),
                    g = this,
                    h = this.length,
                    i = function() {
                        --e || f.resolveWith(g, [g])
                    };
                for ("string" != typeof a && (c = a, a = b), a = a || "fx"; h--;) d = $._data(g[h], a + "queueHooks"), d && d.empty && (e++, d.empty.add(i));
                return i(), f.promise(c)
            }
        });
        var rb, sb, tb, ub = /[\t\r\n]/g,
            vb = /\r/g,
            wb = /^(?:button|input)$/i,
            xb = /^(?:button|input|object|select|textarea)$/i,
            yb = /^a(?:rea|)$/i,
            zb = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
            Ab = $.support.getSetAttribute;
        $.fn.extend({
            attr: function(a, b) {
                return $.access(this, $.attr, a, b, arguments.length > 1)
            },
            removeAttr: function(a) {
                return this.each(function() {
                    $.removeAttr(this, a)
                })
            },
            prop: function(a, b) {
                return $.access(this, $.prop, a, b, arguments.length > 1)
            },
            removeProp: function(a) {
                return a = $.propFix[a] || a, this.each(function() {
                    try {
                        this[a] = b, delete this[a]
                    } catch (c) {}
                })
            },
            addClass: function(a) {
                var b, c, d, e, f, g, h;
                if ($.isFunction(a)) return this.each(function(b) {
                    $(this).addClass(a.call(this, b, this.className))
                });
                if (a && "string" == typeof a)
                    for (b = a.split(bb), c = 0, d = this.length; d > c; c++)
                        if (e = this[c], 1 === e.nodeType)
                            if (e.className || 1 !== b.length) {
                                for (f = " " + e.className + " ", g = 0, h = b.length; h > g; g++) f.indexOf(" " + b[g] + " ") < 0 && (f += b[g] + " ");
                                e.className = $.trim(f)
                            } else e.className = a;
                return this
            },
            removeClass: function(a) {
                var c, d, e, f, g, h, i;
                if ($.isFunction(a)) return this.each(function(b) {
                    $(this).removeClass(a.call(this, b, this.className))
                });
                if (a && "string" == typeof a || a === b)
                    for (c = (a || "").split(bb), h = 0, i = this.length; i > h; h++)
                        if (e = this[h], 1 === e.nodeType && e.className) {
                            for (d = (" " + e.className + " ").replace(ub, " "), f = 0, g = c.length; g > f; f++)
                                for (; d.indexOf(" " + c[f] + " ") >= 0;) d = d.replace(" " + c[f] + " ", " ");
                            e.className = a ? $.trim(d) : ""
                        }
                return this
            },
            toggleClass: function(a, b) {
                var c = typeof a,
                    d = "boolean" == typeof b;
                return $.isFunction(a) ? this.each(function(c) {
                    $(this).toggleClass(a.call(this, c, this.className, b), b)
                }) : this.each(function() {
                    if ("string" === c)
                        for (var e, f = 0, g = $(this), h = b, i = a.split(bb); e = i[f++];) h = d ? h : !g.hasClass(e), g[h ? "addClass" : "removeClass"](e);
                    else("undefined" === c || "boolean" === c) && (this.className && $._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : $._data(this, "__className__") || "")
                })
            },
            hasClass: function(a) {
                for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)
                    if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(ub, " ").indexOf(b) >= 0) return !0;
                return !1
            },
            val: function(a) {
                var c, d, e, f = this[0]; {
                    if (arguments.length) return e = $.isFunction(a), this.each(function(d) {
                        var f, g = $(this);
                        1 === this.nodeType && (f = e ? a.call(this, d, g.val()) : a, null == f ? f = "" : "number" == typeof f ? f += "" : $.isArray(f) && (f = $.map(f, function(a) {
                            return null == a ? "" : a + ""
                        })), c = $.valHooks[this.type] || $.valHooks[this.nodeName.toLowerCase()], c && "set" in c && c.set(this, f, "value") !== b || (this.value = f))
                    });
                    if (f) return c = $.valHooks[f.type] || $.valHooks[f.nodeName.toLowerCase()], c && "get" in c && (d = c.get(f, "value")) !== b ? d : (d = f.value, "string" == typeof d ? d.replace(vb, "") : null == d ? "" : d)
                }
            }
        }), $.extend({
            valHooks: {
                option: {
                    get: function(a) {
                        var b = a.attributes.value;
                        return !b || b.specified ? a.value : a.text
                    }
                },
                select: {
                    get: function(a) {
                        for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)
                            if (c = d[i], !(!c.selected && i !== e || ($.support.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && $.nodeName(c.parentNode, "optgroup"))) {
                                if (b = $(c).val(), f) return b;
                                g.push(b)
                            }
                        return g
                    },
                    set: function(a, b) {
                        var c = $.makeArray(b);
                        return $(a).find("option").each(function() {
                            this.selected = $.inArray($(this).val(), c) >= 0
                        }), c.length || (a.selectedIndex = -1), c
                    }
                }
            },
            attrFn: {},
            attr: function(a, c, d, e) {
                var f, g, h, i = a.nodeType;
                if (a && 3 !== i && 8 !== i && 2 !== i) return e && $.isFunction($.fn[c]) ? $(a)[c](d) : "undefined" == typeof a.getAttribute ? $.prop(a, c, d) : (h = 1 !== i || !$.isXMLDoc(a), h && (c = c.toLowerCase(), g = $.attrHooks[c] || (zb.test(c) ? sb : rb)), d !== b ? null === d ? ($.removeAttr(a, c), void 0) : g && "set" in g && h && (f = g.set(a, d, c)) !== b ? f : (a.setAttribute(c, d + ""), d) : g && "get" in g && h && null !== (f = g.get(a, c)) ? f : (f = a.getAttribute(c), null === f ? b : f))
            },
            removeAttr: function(a, b) {
                var c, d, e, f, g = 0;
                if (b && 1 === a.nodeType)
                    for (d = b.split(bb); g < d.length; g++) e = d[g], e && (c = $.propFix[e] || e, f = zb.test(e), f || $.attr(a, e, ""), a.removeAttribute(Ab ? e : c), f && c in a && (a[c] = !1))
            },
            attrHooks: {
                type: {
                    set: function(a, b) {
                        if (wb.test(a.nodeName) && a.parentNode) $.error("type property can't be changed");
                        else if (!$.support.radioValue && "radio" === b && $.nodeName(a, "input")) {
                            var c = a.value;
                            return a.setAttribute("type", b), c && (a.value = c), b
                        }
                    }
                },
                value: {
                    get: function(a, b) {
                        return rb && $.nodeName(a, "button") ? rb.get(a, b) : b in a ? a.value : null
                    },
                    set: function(a, b, c) {
                        return rb && $.nodeName(a, "button") ? rb.set(a, b, c) : (a.value = b, void 0)
                    }
                }
            },
            propFix: {
                tabindex: "tabIndex",
                readonly: "readOnly",
                "for": "htmlFor",
                "class": "className",
                maxlength: "maxLength",
                cellspacing: "cellSpacing",
                cellpadding: "cellPadding",
                rowspan: "rowSpan",
                colspan: "colSpan",
                usemap: "useMap",
                frameborder: "frameBorder",
                contenteditable: "contentEditable"
            },
            prop: function(a, c, d) {
                var e, f, g, h = a.nodeType;
                if (a && 3 !== h && 8 !== h && 2 !== h) return g = 1 !== h || !$.isXMLDoc(a), g && (c = $.propFix[c] || c, f = $.propHooks[c]), d !== b ? f && "set" in f && (e = f.set(a, d, c)) !== b ? e : a[c] = d : f && "get" in f && null !== (e = f.get(a, c)) ? e : a[c]
            },
            propHooks: {
                tabIndex: {
                    get: function(a) {
                        var c = a.getAttributeNode("tabindex");
                        return c && c.specified ? parseInt(c.value, 10) : xb.test(a.nodeName) || yb.test(a.nodeName) && a.href ? 0 : b
                    }
                }
            }
        }), sb = {
            get: function(a, c) {
                var d, e = $.prop(a, c);
                return e === !0 || "boolean" != typeof e && (d = a.getAttributeNode(c)) && d.nodeValue !== !1 ? c.toLowerCase() : b
            },
            set: function(a, b, c) {
                var d;
                return b === !1 ? $.removeAttr(a, c) : (d = $.propFix[c] || c, d in a && (a[d] = !0), a.setAttribute(c, c.toLowerCase())), c
            }
        }, Ab || (tb = {
            name: !0,
            id: !0,
            coords: !0
        }, rb = $.valHooks.button = {
            get: function(a, c) {
                var d;
                return d = a.getAttributeNode(c), d && (tb[c] ? "" !== d.value : d.specified) ? d.value : b
            },
            set: function(a, b, c) {
                var d = a.getAttributeNode(c);
                return d || (d = P.createAttribute(c), a.setAttributeNode(d)), d.value = b + ""
            }
        }, $.each(["width", "height"], function(a, b) {
            $.attrHooks[b] = $.extend($.attrHooks[b], {
                set: function(a, c) {
                    return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
                }
            })
        }), $.attrHooks.contenteditable = {
            get: rb.get,
            set: function(a, b, c) {
                "" === b && (b = "false"), rb.set(a, b, c)
            }
        }), $.support.hrefNormalized || $.each(["href", "src", "width", "height"], function(a, c) {
            $.attrHooks[c] = $.extend($.attrHooks[c], {
                get: function(a) {
                    var d = a.getAttribute(c, 2);
                    return null === d ? b : d
                }
            })
        }), $.support.style || ($.attrHooks.style = {
            get: function(a) {
                return a.style.cssText.toLowerCase() || b
            },
            set: function(a, b) {
                return a.style.cssText = b + ""
            }
        }), $.support.optSelected || ($.propHooks.selected = $.extend($.propHooks.selected, {
            get: function(a) {
                var b = a.parentNode;
                return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
            }
        })), $.support.enctype || ($.propFix.enctype = "encoding"), $.support.checkOn || $.each(["radio", "checkbox"], function() {
            $.valHooks[this] = {
                get: function(a) {
                    return null === a.getAttribute("value") ? "on" : a.value
                }
            }
        }), $.each(["radio", "checkbox"], function() {
            $.valHooks[this] = $.extend($.valHooks[this], {
                set: function(a, b) {
                    return $.isArray(b) ? a.checked = $.inArray($(a).val(), b) >= 0 : void 0
                }
            })
        });
        var Bb = /^(?:textarea|input|select)$/i,
            Cb = /^([^\.]*|)(?:\.(.+)|)$/,
            Db = /(?:^|\s)hover(\.\S+|)\b/,
            Eb = /^key/,
            Fb = /^(?:mouse|contextmenu)|click/,
            Gb = /^(?:focusinfocus|focusoutblur)$/,
            Hb = function(a) {
                return $.event.special.hover ? a : a.replace(Db, "mouseenter$1 mouseleave$1")
            };
        $.event = {
                add: function(a, c, d, e, f) {
                    var g, h, i, j, k, l, m, n, o, p, q;
                    if (3 !== a.nodeType && 8 !== a.nodeType && c && d && (g = $._data(a))) {
                        for (d.handler && (o = d, d = o.handler, f = o.selector), d.guid || (d.guid = $.guid++), i = g.events, i || (g.events = i = {}), h = g.handle, h || (g.handle = h = function(a) {
                                return "undefined" == typeof $ || a && $.event.triggered === a.type ? b : $.event.dispatch.apply(h.elem, arguments)
                            }, h.elem = a), c = $.trim(Hb(c)).split(" "), j = 0; j < c.length; j++) k = Cb.exec(c[j]) || [], l = k[1], m = (k[2] || "").split(".").sort(), q = $.event.special[l] || {}, l = (f ? q.delegateType : q.bindType) || l, q = $.event.special[l] || {}, n = $.extend({
                            type: l,
                            origType: k[1],
                            data: e,
                            handler: d,
                            guid: d.guid,
                            selector: f,
                            needsContext: f && $.expr.match.needsContext.test(f),
                            namespace: m.join(".")
                        }, o), p = i[l], p || (p = i[l] = [], p.delegateCount = 0, q.setup && q.setup.call(a, e, m, h) !== !1 || (a.addEventListener ? a.addEventListener(l, h, !1) : a.attachEvent && a.attachEvent("on" + l, h))), q.add && (q.add.call(a, n), n.handler.guid || (n.handler.guid = d.guid)), f ? p.splice(p.delegateCount++, 0, n) : p.push(n), $.event.global[l] = !0;
                        a = null
                    }
                },
                global: {},
                remove: function(a, b, c, d, e) {
                    var f, g, h, i, j, k, l, m, n, o, p, q = $.hasData(a) && $._data(a);
                    if (q && (m = q.events)) {
                        for (b = $.trim(Hb(b || "")).split(" "), f = 0; f < b.length; f++)
                            if (g = Cb.exec(b[f]) || [], h = i = g[1], j = g[2], h) {
                                for (n = $.event.special[h] || {}, h = (d ? n.delegateType : n.bindType) || h, o = m[h] || [], k = o.length, j = j ? new RegExp("(^|\\.)" + j.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null, l = 0; l < o.length; l++) p = o[l], !e && i !== p.origType || c && c.guid !== p.guid || j && !j.test(p.namespace) || d && d !== p.selector && ("**" !== d || !p.selector) || (o.splice(l--, 1), p.selector && o.delegateCount--, n.remove && n.remove.call(a, p));
                                0 === o.length && k !== o.length && (n.teardown && n.teardown.call(a, j, q.handle) !== !1 || $.removeEvent(a, h, q.handle), delete m[h])
                            } else
                                for (h in m) $.event.remove(a, h + b[f], c, d, !0);
                        $.isEmptyObject(m) && (delete q.handle, $.removeData(a, "events", !0))
                    }
                },
                customEvent: {
                    getData: !0,
                    setData: !0,
                    changeData: !0
                },
                trigger: function(c, d, e, f) {
                    if (!e || 3 !== e.nodeType && 8 !== e.nodeType) {
                        var g, h, i, j, k, l, m, n, o, p, q = c.type || c,
                            r = [];
                        if (!Gb.test(q + $.event.triggered) && (q.indexOf("!") >= 0 && (q = q.slice(0, -1), h = !0), q.indexOf(".") >= 0 && (r = q.split("."), q = r.shift(), r.sort()), e && !$.event.customEvent[q] || $.event.global[q]))
                            if (c = "object" == typeof c ? c[$.expando] ? c : new $.Event(q, c) : new $.Event(q), c.type = q, c.isTrigger = !0, c.exclusive = h, c.namespace = r.join("."), c.namespace_re = c.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, l = q.indexOf(":") < 0 ? "on" + q : "", e) {
                                if (c.result = b, c.target || (c.target = e), d = null != d ? $.makeArray(d) : [], d.unshift(c), m = $.event.special[q] || {}, !m.trigger || m.trigger.apply(e, d) !== !1) {
                                    if (o = [
                                            [e, m.bindType || q]
                                        ], !f && !m.noBubble && !$.isWindow(e)) {
                                        for (p = m.delegateType || q, j = Gb.test(p + q) ? e : e.parentNode, k = e; j; j = j.parentNode) o.push([j, p]), k = j;
                                        k === (e.ownerDocument || P) && o.push([k.defaultView || k.parentWindow || a, p])
                                    }
                                    for (i = 0; i < o.length && !c.isPropagationStopped(); i++) j = o[i][0], c.type = o[i][1], n = ($._data(j, "events") || {})[c.type] && $._data(j, "handle"), n && n.apply(j, d), n = l && j[l], n && $.acceptData(j) && n.apply && n.apply(j, d) === !1 && c.preventDefault();
                                    return c.type = q, f || c.isDefaultPrevented() || m._default && m._default.apply(e.ownerDocument, d) !== !1 || "click" === q && $.nodeName(e, "a") || !$.acceptData(e) || l && e[q] && ("focus" !== q && "blur" !== q || 0 !== c.target.offsetWidth) && !$.isWindow(e) && (k = e[l], k && (e[l] = null), $.event.triggered = q, e[q](), $.event.triggered = b, k && (e[l] = k)), c.result
                                }
                            } else {
                                g = $.cache;
                                for (i in g) g[i].events && g[i].events[q] && $.event.trigger(c, d, g[i].handle.elem, !0)
                            }
                    }
                },
                dispatch: function(c) {
                    c = $.event.fix(c || a.event);
                    var d, e, f, g, h, i, j, k, l, m = ($._data(this, "events") || {})[c.type] || [],
                        n = m.delegateCount,
                        o = V.call(arguments),
                        p = !c.exclusive && !c.namespace,
                        q = $.event.special[c.type] || {},
                        r = [];
                    if (o[0] = c, c.delegateTarget = this, !q.preDispatch || q.preDispatch.call(this, c) !== !1) {
                        if (n && (!c.button || "click" !== c.type))
                            for (f = c.target; f != this; f = f.parentNode || this)
                                if (f.disabled !== !0 || "click" !== c.type) {
                                    for (h = {}, j = [], d = 0; n > d; d++) k = m[d], l = k.selector, h[l] === b && (h[l] = k.needsContext ? $(l, this).index(f) >= 0 : $.find(l, this, null, [f]).length), h[l] && j.push(k);
                                    j.length && r.push({
                                        elem: f,
                                        matches: j
                                    })
                                }
                        for (m.length > n && r.push({
                                elem: this,
                                matches: m.slice(n)
                            }), d = 0; d < r.length && !c.isPropagationStopped(); d++)
                            for (i = r[d], c.currentTarget = i.elem, e = 0; e < i.matches.length && !c.isImmediatePropagationStopped(); e++) k = i.matches[e], (p || !c.namespace && !k.namespace || c.namespace_re && c.namespace_re.test(k.namespace)) && (c.data = k.data, c.handleObj = k, g = (($.event.special[k.origType] || {}).handle || k.handler).apply(i.elem, o), g !== b && (c.result = g, g === !1 && (c.preventDefault(), c.stopPropagation())));
                        return q.postDispatch && q.postDispatch.call(this, c), c.result
                    }
                },
                props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
                fixHooks: {},
                keyHooks: {
                    props: "char charCode key keyCode".split(" "),
                    filter: function(a, b) {
                        return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
                    }
                },
                mouseHooks: {
                    props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
                    filter: function(a, c) {
                        var d, e, f, g = c.button,
                            h = c.fromElement;
                        return null == a.pageX && null != c.clientX && (d = a.target.ownerDocument || P, e = d.documentElement, f = d.body, a.pageX = c.clientX + (e && e.scrollLeft || f && f.scrollLeft || 0) - (e && e.clientLeft || f && f.clientLeft || 0), a.pageY = c.clientY + (e && e.scrollTop || f && f.scrollTop || 0) - (e && e.clientTop || f && f.clientTop || 0)), !a.relatedTarget && h && (a.relatedTarget = h === a.target ? c.toElement : h), a.which || g === b || (a.which = 1 & g ? 1 : 2 & g ? 3 : 4 & g ? 2 : 0), a
                    }
                },
                fix: function(a) {
                    if (a[$.expando]) return a;
                    var b, c, d = a,
                        e = $.event.fixHooks[a.type] || {},
                        f = e.props ? this.props.concat(e.props) : this.props;
                    for (a = $.Event(d), b = f.length; b;) c = f[--b], a[c] = d[c];
                    return a.target || (a.target = d.srcElement || P), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, e.filter ? e.filter(a, d) : a
                },
                special: {
                    load: {
                        noBubble: !0
                    },
                    focus: {
                        delegateType: "focusin"
                    },
                    blur: {
                        delegateType: "focusout"
                    },
                    beforeunload: {
                        setup: function(a, b, c) {
                            $.isWindow(this) && (this.onbeforeunload = c)
                        },
                        teardown: function(a, b) {
                            this.onbeforeunload === b && (this.onbeforeunload = null)
                        }
                    }
                },
                simulate: function(a, b, c, d) {
                    var e = $.extend(new $.Event, c, {
                        type: a,
                        isSimulated: !0,
                        originalEvent: {}
                    });
                    d ? $.event.trigger(e, null, b) : $.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
                }
            }, $.event.handle = $.event.dispatch, $.removeEvent = P.removeEventListener ? function(a, b, c) {
                a.removeEventListener && a.removeEventListener(b, c, !1)
            } : function(a, b, c) {
                var d = "on" + b;
                a.detachEvent && ("undefined" == typeof a[d] && (a[d] = null), a.detachEvent(d, c))
            }, $.Event = function(a, b) {
                return this instanceof $.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault() ? g : f) : this.type = a, b && $.extend(this, b), this.timeStamp = a && a.timeStamp || $.now(), this[$.expando] = !0, void 0) : new $.Event(a, b)
            }, $.Event.prototype = {
                preventDefault: function() {
                    this.isDefaultPrevented = g;
                    var a = this.originalEvent;
                    a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
                },
                stopPropagation: function() {
                    this.isPropagationStopped = g;
                    var a = this.originalEvent;
                    a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
                },
                stopImmediatePropagation: function() {
                    this.isImmediatePropagationStopped = g, this.stopPropagation()
                },
                isDefaultPrevented: f,
                isPropagationStopped: f,
                isImmediatePropagationStopped: f
            }, $.each({
                mouseenter: "mouseover",
                mouseleave: "mouseout"
            }, function(a, b) {
                $.event.special[a] = {
                    delegateType: b,
                    bindType: b,
                    handle: function(a) {
                        var c, d = this,
                            e = a.relatedTarget,
                            f = a.handleObj;
                        return f.selector, (!e || e !== d && !$.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
                    }
                }
            }), $.support.submitBubbles || ($.event.special.submit = {
                setup: function() {
                    return $.nodeName(this, "form") ? !1 : ($.event.add(this, "click._submit keypress._submit", function(a) {
                        var c = a.target,
                            d = $.nodeName(c, "input") || $.nodeName(c, "button") ? c.form : b;
                        d && !$._data(d, "_submit_attached") && ($.event.add(d, "submit._submit", function(a) {
                            a._submit_bubble = !0
                        }), $._data(d, "_submit_attached", !0))
                    }), void 0)
                },
                postDispatch: function(a) {
                    a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && $.event.simulate("submit", this.parentNode, a, !0))
                },
                teardown: function() {
                    return $.nodeName(this, "form") ? !1 : ($.event.remove(this, "._submit"), void 0)
                }
            }), $.support.changeBubbles || ($.event.special.change = {
                setup: function() {
                    return Bb.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && ($.event.add(this, "propertychange._change", function(a) {
                        "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
                    }), $.event.add(this, "click._change", function(a) {
                        this._just_changed && !a.isTrigger && (this._just_changed = !1), $.event.simulate("change", this, a, !0)
                    })), !1) : ($.event.add(this, "beforeactivate._change", function(a) {
                        var b = a.target;
                        Bb.test(b.nodeName) && !$._data(b, "_change_attached") && ($.event.add(b, "change._change", function(a) {
                            !this.parentNode || a.isSimulated || a.isTrigger || $.event.simulate("change", this.parentNode, a, !0)
                        }), $._data(b, "_change_attached", !0))
                    }), void 0)
                },
                handle: function(a) {
                    var b = a.target;
                    return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
                },
                teardown: function() {
                    return $.event.remove(this, "._change"), !Bb.test(this.nodeName)
                }
            }), $.support.focusinBubbles || $.each({
                focus: "focusin",
                blur: "focusout"
            }, function(a, b) {
                var c = 0,
                    d = function(a) {
                        $.event.simulate(b, a.target, $.event.fix(a), !0)
                    };
                $.event.special[b] = {
                    setup: function() {
                        0 === c++ && P.addEventListener(a, d, !0)
                    },
                    teardown: function() {
                        0 === --c && P.removeEventListener(a, d, !0)
                    }
                }
            }), $.fn.extend({
                on: function(a, c, d, e, g) {
                    var h, i;
                    if ("object" == typeof a) {
                        "string" != typeof c && (d = d || c, c = b);
                        for (i in a) this.on(i, c, d, a[i], g);
                        return this
                    }
                    if (null == d && null == e ? (e = c, d = c = b) : null == e && ("string" == typeof c ? (e = d, d = b) : (e = d, d = c, c = b)), e === !1) e = f;
                    else if (!e) return this;
                    return 1 === g && (h = e, e = function(a) {
                        return $().off(a), h.apply(this, arguments)
                    }, e.guid = h.guid || (h.guid = $.guid++)), this.each(function() {
                        $.event.add(this, a, e, d, c)
                    })
                },
                one: function(a, b, c, d) {
                    return this.on(a, b, c, d, 1)
                },
                off: function(a, c, d) {
                    var e, g;
                    if (a && a.preventDefault && a.handleObj) return e = a.handleObj, $(a.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler), this;
                    if ("object" == typeof a) {
                        for (g in a) this.off(g, c, a[g]);
                        return this
                    }
                    return (c === !1 || "function" == typeof c) && (d = c, c = b), d === !1 && (d = f), this.each(function() {
                        $.event.remove(this, a, d, c)
                    })
                },
                bind: function(a, b, c) {
                    return this.on(a, null, b, c)
                },
                unbind: function(a, b) {
                    return this.off(a, null, b)
                },
                live: function(a, b, c) {
                    return $(this.context).on(a, this.selector, b, c), this
                },
                die: function(a, b) {
                    return $(this.context).off(a, this.selector || "**", b), this
                },
                delegate: function(a, b, c, d) {
                    return this.on(b, a, c, d)
                },
                undelegate: function(a, b, c) {
                    return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
                },
                trigger: function(a, b) {
                    return this.each(function() {
                        $.event.trigger(a, b, this)
                    })
                },
                triggerHandler: function(a, b) {
                    return this[0] ? $.event.trigger(a, b, this[0], !0) : void 0
                },
                toggle: function(a) {
                    var b = arguments,
                        c = a.guid || $.guid++,
                        d = 0,
                        e = function(c) {
                            var e = ($._data(this, "lastToggle" + a.guid) || 0) % d;
                            return $._data(this, "lastToggle" + a.guid, e + 1), c.preventDefault(), b[e].apply(this, arguments) || !1
                        };
                    for (e.guid = c; d < b.length;) b[d++].guid = c;
                    return this.click(e)
                },
                hover: function(a, b) {
                    return this.mouseenter(a).mouseleave(b || a)
                }
            }), $.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(a, b) {
                $.fn[b] = function(a, c) {
                    return null == c && (c = a, a = null), arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
                }, Eb.test(b) && ($.event.fixHooks[b] = $.event.keyHooks), Fb.test(b) && ($.event.fixHooks[b] = $.event.mouseHooks)
            }),
            function(a, b) {
                function c(a, b, c, d) {
                    c = c || [], b = b || F;
                    var e, f, g, h, i = b.nodeType;
                    if (!a || "string" != typeof a) return c;
                    if (1 !== i && 9 !== i) return [];
                    if (g = v(b), !g && !d && (e = cb.exec(a)))
                        if (h = e[1]) {
                            if (9 === i) {
                                if (f = b.getElementById(h), !f || !f.parentNode) return c;
                                if (f.id === h) return c.push(f), c
                            } else if (b.ownerDocument && (f = b.ownerDocument.getElementById(h)) && w(b, f) && f.id === h) return c.push(f), c
                        } else {
                            if (e[2]) return K.apply(c, L.call(b.getElementsByTagName(a), 0)), c;
                            if ((h = e[3]) && mb && b.getElementsByClassName) return K.apply(c, L.call(b.getElementsByClassName(h), 0)), c
                        }
                    return p(a.replace(Z, "$1"), b, c, d, g)
                }

                function d(a) {
                    return function(b) {
                        var c = b.nodeName.toLowerCase();
                        return "input" === c && b.type === a
                    }
                }

                function e(a) {
                    return function(b) {
                        var c = b.nodeName.toLowerCase();
                        return ("input" === c || "button" === c) && b.type === a
                    }
                }

                function f(a) {
                    return N(function(b) {
                        return b = +b, N(function(c, d) {
                            for (var e, f = a([], c.length, b), g = f.length; g--;) c[e = f[g]] && (c[e] = !(d[e] = c[e]))
                        })
                    })
                }

                function g(a, b, c) {
                    if (a === b) return c;
                    for (var d = a.nextSibling; d;) {
                        if (d === b) return -1;
                        d = d.nextSibling
                    }
                    return 1
                }

                function h(a, b) {
                    var d, e, f, g, h, i, j, k = Q[D][a + " "];
                    if (k) return b ? 0 : k.slice(0);
                    for (h = a, i = [], j = t.preFilter; h;) {
                        (!d || (e = _.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), d = !1, (e = ab.exec(h)) && (f.push(d = new E(e.shift())), h = h.slice(d.length), d.type = e[0].replace(Z, " "));
                        for (g in t.filter) !(e = hb[g].exec(h)) || j[g] && !(e = j[g](e)) || (f.push(d = new E(e.shift())), h = h.slice(d.length), d.type = g, d.matches = e);
                        if (!d) break
                    }
                    return b ? h.length : h ? c.error(a) : Q(a, i).slice(0)
                }

                function i(a, b, c) {
                    var d = b.dir,
                        e = c && "parentNode" === b.dir,
                        f = I++;
                    return b.first ? function(b, c, f) {
                        for (; b = b[d];)
                            if (e || 1 === b.nodeType) return a(b, c, f)
                    } : function(b, c, g) {
                        if (g) {
                            for (; b = b[d];)
                                if ((e || 1 === b.nodeType) && a(b, c, g)) return b
                        } else
                            for (var h, i = H + " " + f + " ", j = i + r; b = b[d];)
                                if (e || 1 === b.nodeType) {
                                    if ((h = b[D]) === j) return b.sizset;
                                    if ("string" == typeof h && 0 === h.indexOf(i)) {
                                        if (b.sizset) return b
                                    } else {
                                        if (b[D] = j, a(b, c, g)) return b.sizset = !0, b;
                                        b.sizset = !1
                                    }
                                }
                    }
                }

                function j(a) {
                    return a.length > 1 ? function(b, c, d) {
                        for (var e = a.length; e--;)
                            if (!a[e](b, c, d)) return !1;
                        return !0
                    } : a[0]
                }

                function k(a, b, c, d, e) {
                    for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
                    return g
                }

                function l(a, b, c, d, e, f) {
                    return d && !d[D] && (d = l(d)), e && !e[D] && (e = l(e, f)), N(function(f, g, h, i) {
                        var j, l, m, n = [],
                            p = [],
                            q = g.length,
                            r = f || o(b || "*", h.nodeType ? [h] : h, []),
                            s = !a || !f && b ? r : k(r, n, a, h, i),
                            t = c ? e || (f ? a : q || d) ? [] : g : s;
                        if (c && c(s, t, h, i), d)
                            for (j = k(t, p), d(j, [], h, i), l = j.length; l--;)(m = j[l]) && (t[p[l]] = !(s[p[l]] = m));
                        if (f) {
                            if (e || a) {
                                if (e) {
                                    for (j = [], l = t.length; l--;)(m = t[l]) && j.push(s[l] = m);
                                    e(null, t = [], j, i)
                                }
                                for (l = t.length; l--;)(m = t[l]) && (j = e ? M.call(f, m) : n[l]) > -1 && (f[j] = !(g[j] = m))
                            }
                        } else t = k(t === g ? t.splice(q, t.length) : t), e ? e(null, g, t, i) : K.apply(g, t)
                    })
                }

                function m(a) {
                    for (var b, c, d, e = a.length, f = t.relative[a[0].type], g = f || t.relative[" "], h = f ? 1 : 0, k = i(function(a) {
                            return a === b
                        }, g, !0), n = i(function(a) {
                            return M.call(b, a) > -1
                        }, g, !0), o = [function(a, c, d) {
                            return !f && (d || c !== A) || ((b = c).nodeType ? k(a, c, d) : n(a, c, d))
                        }]; e > h; h++)
                        if (c = t.relative[a[h].type]) o = [i(j(o), c)];
                        else {
                            if (c = t.filter[a[h].type].apply(null, a[h].matches), c[D]) {
                                for (d = ++h; e > d && !t.relative[a[d].type]; d++);
                                return l(h > 1 && j(o), h > 1 && a.slice(0, h - 1).join("").replace(Z, "$1"), c, d > h && m(a.slice(h, d)), e > d && m(a = a.slice(d)), e > d && a.join(""))
                            }
                            o.push(c)
                        }
                    return j(o)
                }

                function n(a, b) {
                    var d = b.length > 0,
                        e = a.length > 0,
                        f = function(g, h, i, j, l) {
                            var m, n, o, p = [],
                                q = 0,
                                s = "0",
                                u = g && [],
                                v = null != l,
                                w = A,
                                x = g || e && t.find.TAG("*", l && h.parentNode || h),
                                y = H += null == w ? 1 : Math.E;
                            for (v && (A = h !== F && h, r = f.el); null != (m = x[s]); s++) {
                                if (e && m) {
                                    for (n = 0; o = a[n]; n++)
                                        if (o(m, h, i)) {
                                            j.push(m);
                                            break
                                        }
                                    v && (H = y, r = ++f.el)
                                }
                                d && ((m = !o && m) && q--, g && u.push(m))
                            }
                            if (q += s, d && s !== q) {
                                for (n = 0; o = b[n]; n++) o(u, p, h, i);
                                if (g) {
                                    if (q > 0)
                                        for (; s--;) u[s] || p[s] || (p[s] = J.call(j));
                                    p = k(p)
                                }
                                K.apply(j, p), v && !g && p.length > 0 && q + b.length > 1 && c.uniqueSort(j)
                            }
                            return v && (H = y, A = w), u
                        };
                    return f.el = 0, d ? N(f) : f
                }

                function o(a, b, d) {
                    for (var e = 0, f = b.length; f > e; e++) c(a, b[e], d);
                    return d
                }

                function p(a, b, c, d, e) {
                    var f, g, i, j, k, l = h(a);
                    if (l.length, !d && 1 === l.length) {
                        if (g = l[0] = l[0].slice(0), g.length > 2 && "ID" === (i = g[0]).type && 9 === b.nodeType && !e && t.relative[g[1].type]) {
                            if (b = t.find.ID(i.matches[0].replace(gb, ""), b, e)[0], !b) return c;
                            a = a.slice(g.shift().length)
                        }
                        for (f = hb.POS.test(a) ? -1 : g.length - 1; f >= 0 && (i = g[f], !t.relative[j = i.type]); f--)
                            if ((k = t.find[j]) && (d = k(i.matches[0].replace(gb, ""), db.test(g[0].type) && b.parentNode || b, e))) {
                                if (g.splice(f, 1), a = d.length && g.join(""), !a) return K.apply(c, L.call(d, 0)), c;
                                break
                            }
                    }
                    return x(a, l)(d, b, e, c, db.test(a)), c
                }

                function q() {}
                var r, s, t, u, v, w, x, y, z, A, B = !0,
                    C = "undefined",
                    D = ("sizcache" + Math.random()).replace(".", ""),
                    E = String,
                    F = a.document,
                    G = F.documentElement,
                    H = 0,
                    I = 0,
                    J = [].pop,
                    K = [].push,
                    L = [].slice,
                    M = [].indexOf || function(a) {
                        for (var b = 0, c = this.length; c > b; b++)
                            if (this[b] === a) return b;
                        return -1
                    },
                    N = function(a, b) {
                        return a[D] = null == b || b, a
                    },
                    O = function() {
                        var a = {},
                            b = [];
                        return N(function(c, d) {
                            return b.push(c) > t.cacheLength && delete a[b.shift()], a[c + " "] = d
                        }, a)
                    },
                    P = O(),
                    Q = O(),
                    R = O(),
                    S = "[\\x20\\t\\r\\n\\f]",
                    T = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
                    U = T.replace("w", "w#"),
                    V = "([*^$|!~]?=)",
                    W = "\\[" + S + "*(" + T + ")" + S + "*(?:" + V + S + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + U + ")|)|)" + S + "*\\]",
                    X = ":(" + T + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + W + ")|[^:]|\\\\.)*|.*))\\)|)",
                    Y = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + S + "*((?:-\\d)?\\d*)" + S + "*\\)|)(?=[^-]|$)",
                    Z = new RegExp("^" + S + "+|((?:^|[^\\\\])(?:\\\\.)*)" + S + "+$", "g"),
                    _ = new RegExp("^" + S + "*," + S + "*"),
                    ab = new RegExp("^" + S + "*([\\x20\\t\\r\\n\\f>+~])" + S + "*"),
                    bb = new RegExp(X),
                    cb = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
                    db = /[\x20\t\r\n\f]*[+~]/,
                    eb = /h\d/i,
                    fb = /input|select|textarea|button/i,
                    gb = /\\(?!\\)/g,
                    hb = {
                        ID: new RegExp("^#(" + T + ")"),
                        CLASS: new RegExp("^\\.(" + T + ")"),
                        NAME: new RegExp("^\\[name=['\"]?(" + T + ")['\"]?\\]"),
                        TAG: new RegExp("^(" + T.replace("w", "w*") + ")"),
                        ATTR: new RegExp("^" + W),
                        PSEUDO: new RegExp("^" + X),
                        POS: new RegExp(Y, "i"),
                        CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + S + "*(even|odd|(([+-]|)(\\d*)n|)" + S + "*(?:([+-]|)" + S + "*(\\d+)|))" + S + "*\\)|)", "i"),
                        needsContext: new RegExp("^" + S + "*[>+~]|" + Y, "i")
                    },
                    ib = function(a) {
                        var b = F.createElement("div");
                        try {
                            return a(b)
                        } catch (c) {
                            return !1
                        } finally {
                            b = null
                        }
                    },
                    jb = ib(function(a) {
                        return a.appendChild(F.createComment("")), !a.getElementsByTagName("*").length
                    }),
                    kb = ib(function(a) {
                        return a.innerHTML = "<a href='#'></a>", a.firstChild && typeof a.firstChild.getAttribute !== C && "#" === a.firstChild.getAttribute("href")
                    }),
                    lb = ib(function(a) {
                        a.innerHTML = "<select></select>";
                        var b = typeof a.lastChild.getAttribute("multiple");
                        return "boolean" !== b && "string" !== b
                    }),
                    mb = ib(function(a) {
                        return a.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>", a.getElementsByClassName && a.getElementsByClassName("e").length ? (a.lastChild.className = "e", 2 === a.getElementsByClassName("e").length) : !1
                    }),
                    nb = ib(function(a) {
                        a.id = D + 0, a.innerHTML = "<a name='" + D + "'></a><div name='" + D + "'></div>", G.insertBefore(a, G.firstChild);
                        var b = F.getElementsByName && F.getElementsByName(D).length === 2 + F.getElementsByName(D + 0).length;
                        return s = !F.getElementById(D), G.removeChild(a), b
                    });
                try {
                    L.call(G.childNodes, 0)[0].nodeType
                } catch (ob) {
                    L = function(a) {
                        for (var b, c = []; b = this[a]; a++) c.push(b);
                        return c
                    }
                }
                c.matches = function(a, b) {
                    return c(a, null, null, b)
                }, c.matchesSelector = function(a, b) {
                    return c(b, null, null, [a]).length > 0
                }, u = c.getText = function(a) {
                    var b, c = "",
                        d = 0,
                        e = a.nodeType;
                    if (e) {
                        if (1 === e || 9 === e || 11 === e) {
                            if ("string" == typeof a.textContent) return a.textContent;
                            for (a = a.firstChild; a; a = a.nextSibling) c += u(a)
                        } else if (3 === e || 4 === e) return a.nodeValue
                    } else
                        for (; b = a[d]; d++) c += u(b);
                    return c
                }, v = c.isXML = function(a) {
                    var b = a && (a.ownerDocument || a).documentElement;
                    return b ? "HTML" !== b.nodeName : !1
                }, w = c.contains = G.contains ? function(a, b) {
                    var c = 9 === a.nodeType ? a.documentElement : a,
                        d = b && b.parentNode;
                    return a === d || !!(d && 1 === d.nodeType && c.contains && c.contains(d))
                } : G.compareDocumentPosition ? function(a, b) {
                    return b && !!(16 & a.compareDocumentPosition(b))
                } : function(a, b) {
                    for (; b = b.parentNode;)
                        if (b === a) return !0;
                    return !1
                }, c.attr = function(a, b) {
                    var c, d = v(a);
                    return d || (b = b.toLowerCase()), (c = t.attrHandle[b]) ? c(a) : d || lb ? a.getAttribute(b) : (c = a.getAttributeNode(b), c ? "boolean" == typeof a[b] ? a[b] ? b : null : c.specified ? c.value : null : null)
                }, t = c.selectors = {
                    cacheLength: 50,
                    createPseudo: N,
                    match: hb,
                    attrHandle: kb ? {} : {
                        href: function(a) {
                            return a.getAttribute("href", 2)
                        },
                        type: function(a) {
                            return a.getAttribute("type")
                        }
                    },
                    find: {
                        ID: s ? function(a, b, c) {
                            if (typeof b.getElementById !== C && !c) {
                                var d = b.getElementById(a);
                                return d && d.parentNode ? [d] : []
                            }
                        } : function(a, c, d) {
                            if (typeof c.getElementById !== C && !d) {
                                var e = c.getElementById(a);
                                return e ? e.id === a || typeof e.getAttributeNode !== C && e.getAttributeNode("id").value === a ? [e] : b : []
                            }
                        },
                        TAG: jb ? function(a, b) {
                            return typeof b.getElementsByTagName !== C ? b.getElementsByTagName(a) : void 0
                        } : function(a, b) {
                            var c = b.getElementsByTagName(a);
                            if ("*" === a) {
                                for (var d, e = [], f = 0; d = c[f]; f++) 1 === d.nodeType && e.push(d);
                                return e
                            }
                            return c
                        },
                        NAME: nb && function(a, b) {
                            return typeof b.getElementsByName !== C ? b.getElementsByName(name) : void 0
                        },
                        CLASS: mb && function(a, b, c) {
                            return typeof b.getElementsByClassName === C || c ? void 0 : b.getElementsByClassName(a)
                        }
                    },
                    relative: {
                        ">": {
                            dir: "parentNode",
                            first: !0
                        },
                        " ": {
                            dir: "parentNode"
                        },
                        "+": {
                            dir: "previousSibling",
                            first: !0
                        },
                        "~": {
                            dir: "previousSibling"
                        }
                    },
                    preFilter: {
                        ATTR: function(a) {
                            return a[1] = a[1].replace(gb, ""), a[3] = (a[4] || a[5] || "").replace(gb, ""), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
                        },
                        CHILD: function(a) {
                            return a[1] = a[1].toLowerCase(), "nth" === a[1] ? (a[2] || c.error(a[0]), a[3] = +(a[3] ? a[4] + (a[5] || 1) : 2 * ("even" === a[2] || "odd" === a[2])), a[4] = +(a[6] + a[7] || "odd" === a[2])) : a[2] && c.error(a[0]), a
                        },
                        PSEUDO: function(a) {
                            var b, c;
                            return hb.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[3] : (b = a[4]) && (bb.test(b) && (c = h(b, !0)) && (c = b.indexOf(")", b.length - c) - b.length) && (b = b.slice(0, c), a[0] = a[0].slice(0, c)), a[2] = b), a.slice(0, 3))
                        }
                    },
                    filter: {
                        ID: s ? function(a) {
                            return a = a.replace(gb, ""),
                                function(b) {
                                    return b.getAttribute("id") === a
                                }
                        } : function(a) {
                            return a = a.replace(gb, ""),
                                function(b) {
                                    var c = typeof b.getAttributeNode !== C && b.getAttributeNode("id");
                                    return c && c.value === a
                                }
                        },
                        TAG: function(a) {
                            return "*" === a ? function() {
                                return !0
                            } : (a = a.replace(gb, "").toLowerCase(), function(b) {
                                return b.nodeName && b.nodeName.toLowerCase() === a
                            })
                        },
                        CLASS: function(a) {
                            var b = P[D][a + " "];
                            return b || (b = new RegExp("(^|" + S + ")" + a + "(" + S + "|$)")) && P(a, function(a) {
                                return b.test(a.className || typeof a.getAttribute !== C && a.getAttribute("class") || "")
                            })
                        },
                        ATTR: function(a, b, d) {
                            return function(e) {
                                var f = c.attr(e, a);
                                return null == f ? "!=" === b : b ? (f += "", "=" === b ? f === d : "!=" === b ? f !== d : "^=" === b ? d && 0 === f.indexOf(d) : "*=" === b ? d && f.indexOf(d) > -1 : "$=" === b ? d && f.substr(f.length - d.length) === d : "~=" === b ? (" " + f + " ").indexOf(d) > -1 : "|=" === b ? f === d || f.substr(0, d.length + 1) === d + "-" : !1) : !0
                            }
                        },
                        CHILD: function(a, b, c, d) {
                            return "nth" === a ? function(a) {
                                var b, e, f = a.parentNode;
                                if (1 === c && 0 === d) return !0;
                                if (f)
                                    for (e = 0, b = f.firstChild; b && (1 !== b.nodeType || (e++, a !== b)); b = b.nextSibling);
                                return e -= d, e === c || 0 === e % c && e / c >= 0
                            } : function(b) {
                                var c = b;
                                switch (a) {
                                    case "only":
                                    case "first":
                                        for (; c = c.previousSibling;)
                                            if (1 === c.nodeType) return !1;
                                        if ("first" === a) return !0;
                                        c = b;
                                    case "last":
                                        for (; c = c.nextSibling;)
                                            if (1 === c.nodeType) return !1;
                                        return !0
                                }
                            }
                        },
                        PSEUDO: function(a, b) {
                            var d, e = t.pseudos[a] || t.setFilters[a.toLowerCase()] || c.error("unsupported pseudo: " + a);
                            return e[D] ? e(b) : e.length > 1 ? (d = [a, a, "", b], t.setFilters.hasOwnProperty(a.toLowerCase()) ? N(function(a, c) {
                                for (var d, f = e(a, b), g = f.length; g--;) d = M.call(a, f[g]), a[d] = !(c[d] = f[g])
                            }) : function(a) {
                                return e(a, 0, d)
                            }) : e
                        }
                    },
                    pseudos: {
                        not: N(function(a) {
                            var b = [],
                                c = [],
                                d = x(a.replace(Z, "$1"));
                            return d[D] ? N(function(a, b, c, e) {
                                for (var f, g = d(a, null, e, []), h = a.length; h--;)(f = g[h]) && (a[h] = !(b[h] = f))
                            }) : function(a, e, f) {
                                return b[0] = a, d(b, null, f, c), !c.pop()
                            }
                        }),
                        has: N(function(a) {
                            return function(b) {
                                return c(a, b).length > 0
                            }
                        }),
                        contains: N(function(a) {
                            return function(b) {
                                return (b.textContent || b.innerText || u(b)).indexOf(a) > -1
                            }
                        }),
                        enabled: function(a) {
                            return a.disabled === !1
                        },
                        disabled: function(a) {
                            return a.disabled === !0
                        },
                        checked: function(a) {
                            var b = a.nodeName.toLowerCase();
                            return "input" === b && !!a.checked || "option" === b && !!a.selected
                        },
                        selected: function(a) {
                            return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
                        },
                        parent: function(a) {
                            return !t.pseudos.empty(a)
                        },
                        empty: function(a) {
                            var b;
                            for (a = a.firstChild; a;) {
                                if (a.nodeName > "@" || 3 === (b = a.nodeType) || 4 === b) return !1;
                                a = a.nextSibling
                            }
                            return !0
                        },
                        header: function(a) {
                            return eb.test(a.nodeName)
                        },
                        text: function(a) {
                            var b, c;
                            return "input" === a.nodeName.toLowerCase() && "text" === (b = a.type) && (null == (c = a.getAttribute("type")) || c.toLowerCase() === b)
                        },
                        radio: d("radio"),
                        checkbox: d("checkbox"),
                        file: d("file"),
                        password: d("password"),
                        image: d("image"),
                        submit: e("submit"),
                        reset: e("reset"),
                        button: function(a) {
                            var b = a.nodeName.toLowerCase();
                            return "input" === b && "button" === a.type || "button" === b
                        },
                        input: function(a) {
                            return fb.test(a.nodeName)
                        },
                        focus: function(a) {
                            var b = a.ownerDocument;
                            return a === b.activeElement && (!b.hasFocus || b.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
                        },
                        active: function(a) {
                            return a === a.ownerDocument.activeElement
                        },
                        first: f(function() {
                            return [0]
                        }),
                        last: f(function(a, b) {
                            return [b - 1]
                        }),
                        eq: f(function(a, b, c) {
                            return [0 > c ? c + b : c]
                        }),
                        even: f(function(a, b) {
                            for (var c = 0; b > c; c += 2) a.push(c);
                            return a
                        }),
                        odd: f(function(a, b) {
                            for (var c = 1; b > c; c += 2) a.push(c);
                            return a
                        }),
                        lt: f(function(a, b, c) {
                            for (var d = 0 > c ? c + b : c; --d >= 0;) a.push(d);
                            return a
                        }),
                        gt: f(function(a, b, c) {
                            for (var d = 0 > c ? c + b : c; ++d < b;) a.push(d);
                            return a
                        })
                    }
                }, y = G.compareDocumentPosition ? function(a, b) {
                    return a === b ? (z = !0, 0) : (a.compareDocumentPosition && b.compareDocumentPosition ? 4 & a.compareDocumentPosition(b) : a.compareDocumentPosition) ? -1 : 1
                } : function(a, b) {
                    if (a === b) return z = !0, 0;
                    if (a.sourceIndex && b.sourceIndex) return a.sourceIndex - b.sourceIndex;
                    var c, d, e = [],
                        f = [],
                        h = a.parentNode,
                        i = b.parentNode,
                        j = h;
                    if (h === i) return g(a, b);
                    if (!h) return -1;
                    if (!i) return 1;
                    for (; j;) e.unshift(j), j = j.parentNode;
                    for (j = i; j;) f.unshift(j), j = j.parentNode;
                    c = e.length, d = f.length;
                    for (var k = 0; c > k && d > k; k++)
                        if (e[k] !== f[k]) return g(e[k], f[k]);
                    return k === c ? g(a, f[k], -1) : g(e[k], b, 1)
                }, [0, 0].sort(y), B = !z, c.uniqueSort = function(a) {
                    var b, c = [],
                        d = 1,
                        e = 0;
                    if (z = B, a.sort(y), z) {
                        for (; b = a[d]; d++) b === a[d - 1] && (e = c.push(d));
                        for (; e--;) a.splice(c[e], 1)
                    }
                    return a
                }, c.error = function(a) {
                    throw new Error("Syntax error, unrecognized expression: " + a)
                }, x = c.compile = function(a, b) {
                    var c, d = [],
                        e = [],
                        f = R[D][a + " "];
                    if (!f) {
                        for (b || (b = h(a)), c = b.length; c--;) f = m(b[c]), f[D] ? d.push(f) : e.push(f);
                        f = R(a, n(e, d))
                    }
                    return f
                }, F.querySelectorAll && ! function() {
                    var a, b = p,
                        d = /'|\\/g,
                        e = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
                        f = [":focus"],
                        g = [":active"],
                        i = G.matchesSelector || G.mozMatchesSelector || G.webkitMatchesSelector || G.oMatchesSelector || G.msMatchesSelector;
                    ib(function(a) {
                        a.innerHTML = "<select><option selected=''></option></select>", a.querySelectorAll("[selected]").length || f.push("\\[" + S + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), a.querySelectorAll(":checked").length || f.push(":checked")
                    }), ib(function(a) {
                        a.innerHTML = "<p test=''></p>", a.querySelectorAll("[test^='']").length && f.push("[*^$]=" + S + "*(?:\"\"|'')"), a.innerHTML = "<input type='hidden'/>", a.querySelectorAll(":enabled").length || f.push(":enabled", ":disabled")
                    }), f = new RegExp(f.join("|")), p = function(a, c, e, g, i) {
                        if (!g && !i && !f.test(a)) {
                            var j, k, l = !0,
                                m = D,
                                n = c,
                                o = 9 === c.nodeType && a;
                            if (1 === c.nodeType && "object" !== c.nodeName.toLowerCase()) {
                                for (j = h(a), (l = c.getAttribute("id")) ? m = l.replace(d, "\\$&") : c.setAttribute("id", m), m = "[id='" + m + "'] ", k = j.length; k--;) j[k] = m + j[k].join("");
                                n = db.test(a) && c.parentNode || c, o = j.join(",")
                            }
                            if (o) try {
                                return K.apply(e, L.call(n.querySelectorAll(o), 0)), e
                            } catch (p) {} finally {
                                l || c.removeAttribute("id")
                            }
                        }
                        return b(a, c, e, g, i)
                    }, i && (ib(function(b) {
                        a = i.call(b, "div");
                        try {
                            i.call(b, "[test!='']:sizzle"), g.push("!=", X)
                        } catch (c) {}
                    }), g = new RegExp(g.join("|")), c.matchesSelector = function(b, d) {
                        if (d = d.replace(e, "='$1']"), !v(b) && !g.test(d) && !f.test(d)) try {
                            var h = i.call(b, d);
                            if (h || a || b.document && 11 !== b.document.nodeType) return h
                        } catch (j) {}
                        return c(d, null, null, [b]).length > 0
                    })
                }(), t.pseudos.nth = t.pseudos.eq, t.filters = q.prototype = t.pseudos, t.setFilters = new q, c.attr = $.attr, $.find = c, $.expr = c.selectors, $.expr[":"] = $.expr.pseudos, $.unique = c.uniqueSort, $.text = c.getText, $.isXMLDoc = c.isXML, $.contains = c.contains
            }(a);
        var Ib = /Until$/,
            Jb = /^(?:parents|prev(?:Until|All))/,
            Kb = /^.[^:#\[\.,]*$/,
            Lb = $.expr.match.needsContext,
            Mb = {
                children: !0,
                contents: !0,
                next: !0,
                prev: !0
            };
        $.fn.extend({
            find: function(a) {
                var b, c, d, e, f, g, h = this;
                if ("string" != typeof a) return $(a).filter(function() {
                    for (b = 0, c = h.length; c > b; b++)
                        if ($.contains(h[b], this)) return !0
                });
                for (g = this.pushStack("", "find", a), b = 0, c = this.length; c > b; b++)
                    if (d = g.length, $.find(a, this[b], g), b > 0)
                        for (e = d; e < g.length; e++)
                            for (f = 0; d > f; f++)
                                if (g[f] === g[e]) {
                                    g.splice(e--, 1);
                                    break
                                }
                return g
            },
            has: function(a) {
                var b, c = $(a, this),
                    d = c.length;
                return this.filter(function() {
                    for (b = 0; d > b; b++)
                        if ($.contains(this, c[b])) return !0
                })
            },
            not: function(a) {
                return this.pushStack(j(this, a, !1), "not", a)
            },
            filter: function(a) {
                return this.pushStack(j(this, a, !0), "filter", a)
            },
            is: function(a) {
                return !!a && ("string" == typeof a ? Lb.test(a) ? $(a, this.context).index(this[0]) >= 0 : $.filter(a, this).length > 0 : this.filter(a).length > 0)
            },
            closest: function(a, b) {
                for (var c, d = 0, e = this.length, f = [], g = Lb.test(a) || "string" != typeof a ? $(a, b || this.context) : 0; e > d; d++)
                    for (c = this[d]; c && c.ownerDocument && c !== b && 11 !== c.nodeType;) {
                        if (g ? g.index(c) > -1 : $.find.matchesSelector(c, a)) {
                            f.push(c);
                            break
                        }
                        c = c.parentNode
                    }
                return f = f.length > 1 ? $.unique(f) : f, this.pushStack(f, "closest", a)
            },
            index: function(a) {
                return a ? "string" == typeof a ? $.inArray(this[0], $(a)) : $.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
            },
            add: function(a, b) {
                var c = "string" == typeof a ? $(a, b) : $.makeArray(a && a.nodeType ? [a] : a),
                    d = $.merge(this.get(), c);
                return this.pushStack(h(c[0]) || h(d[0]) ? d : $.unique(d))
            },
            addBack: function(a) {
                return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
            }
        }), $.fn.andSelf = $.fn.addBack, $.each({
            parent: function(a) {
                var b = a.parentNode;
                return b && 11 !== b.nodeType ? b : null
            },
            parents: function(a) {
                return $.dir(a, "parentNode")
            },
            parentsUntil: function(a, b, c) {
                return $.dir(a, "parentNode", c)
            },
            next: function(a) {
                return i(a, "nextSibling")
            },
            prev: function(a) {
                return i(a, "previousSibling")
            },
            nextAll: function(a) {
                return $.dir(a, "nextSibling")
            },
            prevAll: function(a) {
                return $.dir(a, "previousSibling")
            },
            nextUntil: function(a, b, c) {
                return $.dir(a, "nextSibling", c)
            },
            prevUntil: function(a, b, c) {
                return $.dir(a, "previousSibling", c)
            },
            siblings: function(a) {
                return $.sibling((a.parentNode || {}).firstChild, a)
            },
            children: function(a) {
                return $.sibling(a.firstChild)
            },
            contents: function(a) {
                return $.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : $.merge([], a.childNodes)
            }
        }, function(a, b) {
            $.fn[a] = function(c, d) {
                var e = $.map(this, b, c);
                return Ib.test(a) || (d = c), d && "string" == typeof d && (e = $.filter(d, e)), e = this.length > 1 && !Mb[a] ? $.unique(e) : e, this.length > 1 && Jb.test(a) && (e = e.reverse()), this.pushStack(e, a, V.call(arguments).join(","))
            }
        }), $.extend({
            filter: function(a, b, c) {
                return c && (a = ":not(" + a + ")"), 1 === b.length ? $.find.matchesSelector(b[0], a) ? [b[0]] : [] : $.find.matches(a, b)
            },
            dir: function(a, c, d) {
                for (var e = [], f = a[c]; f && 9 !== f.nodeType && (d === b || 1 !== f.nodeType || !$(f).is(d));) 1 === f.nodeType && e.push(f), f = f[c];
                return e
            },
            sibling: function(a, b) {
                for (var c = []; a; a = a.nextSibling) 1 === a.nodeType && a !== b && c.push(a);
                return c
            }
        });
        var Nb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
            Ob = / jQuery\d+="(?:null|\d+)"/g,
            Pb = /^\s+/,
            Qb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
            Rb = /<([\w:]+)/,
            Sb = /<tbody/i,
            Tb = /<|&#?\w+;/,
            Ub = /<(?:script|style|link)/i,
            Vb = /<(?:script|object|embed|option|style)/i,
            Wb = new RegExp("<(?:" + Nb + ")[\\s/>]", "i"),
            Xb = /^(?:checkbox|radio)$/,
            Yb = /checked\s*(?:[^=]|=\s*.checked.)/i,
            Zb = /\/(java|ecma)script/i,
            $b = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
            _b = {
                option: [1, "<select multiple='multiple'>", "</select>"],
                legend: [1, "<fieldset>", "</fieldset>"],
                thead: [1, "<table>", "</table>"],
                tr: [2, "<table><tbody>", "</tbody></table>"],
                td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
                col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
                area: [1, "<map>", "</map>"],
                _default: [0, "", ""]
            },
            ac = k(P),
            bc = ac.appendChild(P.createElement("div"));
        _b.optgroup = _b.option, _b.tbody = _b.tfoot = _b.colgroup = _b.caption = _b.thead, _b.th = _b.td, $.support.htmlSerialize || (_b._default = [1, "X<div>", "</div>"]), $.fn.extend({
                text: function(a) {
                    return $.access(this, function(a) {
                        return a === b ? $.text(this) : this.empty().append((this[0] && this[0].ownerDocument || P).createTextNode(a))
                    }, null, a, arguments.length)
                },
                wrapAll: function(a) {
                    if ($.isFunction(a)) return this.each(function(b) {
                        $(this).wrapAll(a.call(this, b))
                    });
                    if (this[0]) {
                        var b = $(a, this[0].ownerDocument).eq(0).clone(!0);
                        this[0].parentNode && b.insertBefore(this[0]), b.map(function() {
                            for (var a = this; a.firstChild && 1 === a.firstChild.nodeType;) a = a.firstChild;
                            return a
                        }).append(this)
                    }
                    return this
                },
                wrapInner: function(a) {
                    return $.isFunction(a) ? this.each(function(b) {
                        $(this).wrapInner(a.call(this, b))
                    }) : this.each(function() {
                        var b = $(this),
                            c = b.contents();
                        c.length ? c.wrapAll(a) : b.append(a)
                    })
                },
                wrap: function(a) {
                    var b = $.isFunction(a);
                    return this.each(function(c) {
                        $(this).wrapAll(b ? a.call(this, c) : a)
                    })
                },
                unwrap: function() {
                    return this.parent().each(function() {
                        $.nodeName(this, "body") || $(this).replaceWith(this.childNodes)
                    }).end()
                },
                append: function() {
                    return this.domManip(arguments, !0, function(a) {
                        (1 === this.nodeType || 11 === this.nodeType) && this.appendChild(a)
                    })
                },
                prepend: function() {
                    return this.domManip(arguments, !0, function(a) {
                        (1 === this.nodeType || 11 === this.nodeType) && this.insertBefore(a, this.firstChild)
                    })
                },
                before: function() {
                    if (!h(this[0])) return this.domManip(arguments, !1, function(a) {
                        this.parentNode.insertBefore(a, this)
                    });
                    if (arguments.length) {
                        var a = $.clean(arguments);
                        return this.pushStack($.merge(a, this), "before", this.selector)
                    }
                },
                after: function() {
                    if (!h(this[0])) return this.domManip(arguments, !1, function(a) {
                        this.parentNode.insertBefore(a, this.nextSibling)
                    });
                    if (arguments.length) {
                        var a = $.clean(arguments);
                        return this.pushStack($.merge(this, a), "after", this.selector)
                    }
                },
                remove: function(a, b) {
                    for (var c, d = 0; null != (c = this[d]); d++)(!a || $.filter(a, [c]).length) && (b || 1 !== c.nodeType || ($.cleanData(c.getElementsByTagName("*")), $.cleanData([c])), c.parentNode && c.parentNode.removeChild(c));
                    return this
                },
                empty: function() {
                    for (var a, b = 0; null != (a = this[b]); b++)
                        for (1 === a.nodeType && $.cleanData(a.getElementsByTagName("*")); a.firstChild;) a.removeChild(a.firstChild);
                    return this
                },
                clone: function(a, b) {
                    return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function() {
                        return $.clone(this, a, b)
                    })
                },
                html: function(a) {
                    return $.access(this, function(a) {
                        var c = this[0] || {},
                            d = 0,
                            e = this.length;
                        if (a === b) return 1 === c.nodeType ? c.innerHTML.replace(Ob, "") : b;
                        if (!("string" != typeof a || Ub.test(a) || !$.support.htmlSerialize && Wb.test(a) || !$.support.leadingWhitespace && Pb.test(a) || _b[(Rb.exec(a) || ["", ""])[1].toLowerCase()])) {
                            a = a.replace(Qb, "<$1></$2>");
                            try {
                                for (; e > d; d++) c = this[d] || {}, 1 === c.nodeType && ($.cleanData(c.getElementsByTagName("*")), c.innerHTML = a);
                                c = 0
                            } catch (f) {}
                        }
                        c && this.empty().append(a)
                    }, null, a, arguments.length)
                },
                replaceWith: function(a) {
                    return h(this[0]) ? this.length ? this.pushStack($($.isFunction(a) ? a() : a), "replaceWith", a) : this : $.isFunction(a) ? this.each(function(b) {
                        var c = $(this),
                            d = c.html();
                        c.replaceWith(a.call(this, b, d))
                    }) : ("string" != typeof a && (a = $(a).detach()), this.each(function() {
                        var b = this.nextSibling,
                            c = this.parentNode;
                        $(this).remove(), b ? $(b).before(a) : $(c).append(a)
                    }))
                },
                detach: function(a) {
                    return this.remove(a, !0)
                },
                domManip: function(a, c, d) {
                    a = [].concat.apply([], a);
                    var e, f, g, h, i = 0,
                        j = a[0],
                        k = [],
                        m = this.length;
                    if (!$.support.checkClone && m > 1 && "string" == typeof j && Yb.test(j)) return this.each(function() {
                        $(this).domManip(a, c, d)
                    });
                    if ($.isFunction(j)) return this.each(function(e) {
                        var f = $(this);
                        a[0] = j.call(this, e, c ? f.html() : b), f.domManip(a, c, d)
                    });
                    if (this[0]) {
                        if (e = $.buildFragment(a, this, k), g = e.fragment, f = g.firstChild, 1 === g.childNodes.length && (g = f), f)
                            for (c = c && $.nodeName(f, "tr"), h = e.cacheable || m - 1; m > i; i++) d.call(c && $.nodeName(this[i], "table") ? l(this[i], "tbody") : this[i], i === h ? g : $.clone(g, !0, !0));
                        g = f = null, k.length && $.each(k, function(a, b) {
                            b.src ? $.ajax ? $.ajax({
                                url: b.src,
                                type: "GET",
                                dataType: "script",
                                async: !1,
                                global: !1,
                                "throws": !0
                            }) : $.error("no ajax") : $.globalEval((b.text || b.textContent || b.innerHTML || "").replace($b, "")), b.parentNode && b.parentNode.removeChild(b)
                        })
                    }
                    return this
                }
            }), $.buildFragment = function(a, c, d) {
                var e, f, g, h = a[0];
                return c = c || P, c = !c.nodeType && c[0] || c, c = c.ownerDocument || c, !(1 === a.length && "string" == typeof h && h.length < 512 && c === P && "<" === h.charAt(0)) || Vb.test(h) || !$.support.checkClone && Yb.test(h) || !$.support.html5Clone && Wb.test(h) || (f = !0, e = $.fragments[h], g = e !== b), e || (e = c.createDocumentFragment(), $.clean(a, c, e, d), f && ($.fragments[h] = g && e)), {
                    fragment: e,
                    cacheable: f
                }
            }, $.fragments = {}, $.each({
                appendTo: "append",
                prependTo: "prepend",
                insertBefore: "before",
                insertAfter: "after",
                replaceAll: "replaceWith"
            }, function(a, b) {
                $.fn[a] = function(c) {
                    var d, e = 0,
                        f = [],
                        g = $(c),
                        h = g.length,
                        i = 1 === this.length && this[0].parentNode;
                    if ((null == i || i && 11 === i.nodeType && 1 === i.childNodes.length) && 1 === h) return g[b](this[0]), this;
                    for (; h > e; e++) d = (e > 0 ? this.clone(!0) : this).get(), $(g[e])[b](d), f = f.concat(d);
                    return this.pushStack(f, a, g.selector)
                }
            }), $.extend({
                clone: function(a, b, c) {
                    var d, e, f, g;
                    if ($.support.html5Clone || $.isXMLDoc(a) || !Wb.test("<" + a.nodeName + ">") ? g = a.cloneNode(!0) : (bc.innerHTML = a.outerHTML, bc.removeChild(g = bc.firstChild)), !($.support.noCloneEvent && $.support.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || $.isXMLDoc(a)))
                        for (n(a, g), d = o(a), e = o(g), f = 0; d[f]; ++f) e[f] && n(d[f], e[f]);
                    if (b && (m(a, g), c))
                        for (d = o(a), e = o(g), f = 0; d[f]; ++f) m(d[f], e[f]);
                    return d = e = null, g
                },
                clean: function(a, b, c, d) {
                    var e, f, g, h, i, j, l, m, n, o, q, r = b === P && ac,
                        s = [];
                    for (b && "undefined" != typeof b.createDocumentFragment || (b = P), e = 0; null != (g = a[e]); e++)
                        if ("number" == typeof g && (g += ""), g) {
                            if ("string" == typeof g)
                                if (Tb.test(g)) {
                                    for (r = r || k(b), l = b.createElement("div"), r.appendChild(l), g = g.replace(Qb, "<$1></$2>"), h = (Rb.exec(g) || ["", ""])[1].toLowerCase(), i = _b[h] || _b._default, j = i[0], l.innerHTML = i[1] + g + i[2]; j--;) l = l.lastChild;
                                    if (!$.support.tbody)
                                        for (m = Sb.test(g), n = "table" !== h || m ? "<table>" !== i[1] || m ? [] : l.childNodes : l.firstChild && l.firstChild.childNodes, f = n.length - 1; f >= 0; --f) $.nodeName(n[f], "tbody") && !n[f].childNodes.length && n[f].parentNode.removeChild(n[f]);
                                    !$.support.leadingWhitespace && Pb.test(g) && l.insertBefore(b.createTextNode(Pb.exec(g)[0]), l.firstChild), g = l.childNodes, l.parentNode.removeChild(l)
                                } else g = b.createTextNode(g);
                            g.nodeType ? s.push(g) : $.merge(s, g)
                        }
                    if (l && (g = l = r = null), !$.support.appendChecked)
                        for (e = 0; null != (g = s[e]); e++) $.nodeName(g, "input") ? p(g) : "undefined" != typeof g.getElementsByTagName && $.grep(g.getElementsByTagName("input"), p);
                    if (c)
                        for (o = function(a) {
                                return !a.type || Zb.test(a.type) ? d ? d.push(a.parentNode ? a.parentNode.removeChild(a) : a) : c.appendChild(a) : void 0
                            }, e = 0; null != (g = s[e]); e++) $.nodeName(g, "script") && o(g) || (c.appendChild(g), "undefined" != typeof g.getElementsByTagName && (q = $.grep($.merge([], g.getElementsByTagName("script")), o), s.splice.apply(s, [e + 1, 0].concat(q)), e += q.length));
                    return s
                },
                cleanData: function(a, b) {
                    for (var c, d, e, f, g = 0, h = $.expando, i = $.cache, j = $.support.deleteExpando, k = $.event.special; null != (e = a[g]); g++)
                        if ((b || $.acceptData(e)) && (d = e[h], c = d && i[d])) {
                            if (c.events)
                                for (f in c.events) k[f] ? $.event.remove(e, f) : $.removeEvent(e, f, c.handle);
                            i[d] && (delete i[d], j ? delete e[h] : e.removeAttribute ? e.removeAttribute(h) : e[h] = null, $.deletedIds.push(d))
                        }
                }
            }),
            function() {
                var a, b;
                $.uaMatch = function(a) {
                    a = a.toLowerCase();
                    var b = /(chrome)[ \/]([\w.]+)/.exec(a) || /(webkit)[ \/]([\w.]+)/.exec(a) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a) || /(msie) ([\w.]+)/.exec(a) || a.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a) || [];
                    return {
                        browser: b[1] || "",
                        version: b[2] || "0"
                    }
                }, a = $.uaMatch(R.userAgent), b = {}, a.browser && (b[a.browser] = !0, b.version = a.version), b.chrome ? b.webkit = !0 : b.webkit && (b.safari = !0), $.browser = b, $.sub = function() {
                    function a(b, c) {
                        return new a.fn.init(b, c)
                    }
                    $.extend(!0, a, this), a.superclass = this, a.fn = a.prototype = this(), a.fn.constructor = a, a.sub = this.sub, a.fn.init = function(c, d) {
                        return d && d instanceof $ && !(d instanceof a) && (d = a(d)), $.fn.init.call(this, c, d, b)
                    }, a.fn.init.prototype = a.fn;
                    var b = a(P);
                    return a
                }
            }();
        var cc, dc, ec, fc = /alpha\([^)]*\)/i,
            gc = /opacity=([^)]*)/,
            hc = /^(top|right|bottom|left)$/,
            ic = /^(none|table(?!-c[ea]).+)/,
            jc = /^margin/,
            kc = new RegExp("^(" + _ + ")(.*)$", "i"),
            lc = new RegExp("^(" + _ + ")(?!px)[a-z%]+$", "i"),
            mc = new RegExp("^([-+])=(" + _ + ")", "i"),
            nc = {
                BODY: "block"
            },
            oc = {
                position: "absolute",
                visibility: "hidden",
                display: "block"
            },
            pc = {
                letterSpacing: 0,
                fontWeight: 400
            },
            qc = ["Top", "Right", "Bottom", "Left"],
            rc = ["Webkit", "O", "Moz", "ms"],
            sc = $.fn.toggle;
        $.fn.extend({
            css: function(a, c) {
                return $.access(this, function(a, c, d) {
                    return d !== b ? $.style(a, c, d) : $.css(a, c)
                }, a, c, arguments.length > 1)
            },
            show: function() {
                return s(this, !0)
            },
            hide: function() {
                return s(this)
            },
            toggle: function(a, b) {
                var c = "boolean" == typeof a;
                return $.isFunction(a) && $.isFunction(b) ? sc.apply(this, arguments) : this.each(function() {
                    (c ? a : r(this)) ? $(this).show(): $(this).hide()
                })
            }
        }), $.extend({
            cssHooks: {
                opacity: {
                    get: function(a, b) {
                        if (b) {
                            var c = cc(a, "opacity");
                            return "" === c ? "1" : c
                        }
                    }
                }
            },
            cssNumber: {
                fillOpacity: !0,
                fontWeight: !0,
                lineHeight: !0,
                opacity: !0,
                orphans: !0,
                widows: !0,
                zIndex: !0,
                zoom: !0
            },
            cssProps: {
                "float": $.support.cssFloat ? "cssFloat" : "styleFloat"
            },
            style: function(a, c, d, e) {
                if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
                    var f, g, h, i = $.camelCase(c),
                        j = a.style;
                    if (c = $.cssProps[i] || ($.cssProps[i] = q(j, i)), h = $.cssHooks[c] || $.cssHooks[i], d === b) return h && "get" in h && (f = h.get(a, !1, e)) !== b ? f : j[c];
                    if (g = typeof d, "string" === g && (f = mc.exec(d)) && (d = (f[1] + 1) * f[2] + parseFloat($.css(a, c)), g = "number"), !(null == d || "number" === g && isNaN(d) || ("number" !== g || $.cssNumber[i] || (d += "px"), h && "set" in h && (d = h.set(a, d, e)) === b))) try {
                        j[c] = d
                    } catch (k) {}
                }
            },
            css: function(a, c, d, e) {
                var f, g, h, i = $.camelCase(c);
                return c = $.cssProps[i] || ($.cssProps[i] = q(a.style, i)), h = $.cssHooks[c] || $.cssHooks[i], h && "get" in h && (f = h.get(a, !0, e)), f === b && (f = cc(a, c)), "normal" === f && c in pc && (f = pc[c]), d || e !== b ? (g = parseFloat(f), d || $.isNumeric(g) ? g || 0 : f) : f
            },
            swap: function(a, b, c) {
                var d, e, f = {};
                for (e in b) f[e] = a.style[e], a.style[e] = b[e];
                d = c.call(a);
                for (e in b) a.style[e] = f[e];
                return d
            }
        }), a.getComputedStyle ? cc = function(b, c) {
            var d, e, f, g, h = a.getComputedStyle(b, null),
                i = b.style;
            return h && (d = h.getPropertyValue(c) || h[c], "" !== d || $.contains(b.ownerDocument, b) || (d = $.style(b, c)), lc.test(d) && jc.test(c) && (e = i.width, f = i.minWidth, g = i.maxWidth, i.minWidth = i.maxWidth = i.width = d, d = h.width, i.width = e, i.minWidth = f, i.maxWidth = g)), d
        } : P.documentElement.currentStyle && (cc = function(a, b) {
            var c, d, e = a.currentStyle && a.currentStyle[b],
                f = a.style;
            return null == e && f && f[b] && (e = f[b]), lc.test(e) && !hc.test(b) && (c = f.left, d = a.runtimeStyle && a.runtimeStyle.left, d && (a.runtimeStyle.left = a.currentStyle.left), f.left = "fontSize" === b ? "1em" : e, e = f.pixelLeft + "px", f.left = c, d && (a.runtimeStyle.left = d)), "" === e ? "auto" : e
        }), $.each(["height", "width"], function(a, b) {
            $.cssHooks[b] = {
                get: function(a, c, d) {
                    return c ? 0 === a.offsetWidth && ic.test(cc(a, "display")) ? $.swap(a, oc, function() {
                        return v(a, b, d)
                    }) : v(a, b, d) : void 0
                },
                set: function(a, c, d) {
                    return t(a, c, d ? u(a, b, d, $.support.boxSizing && "border-box" === $.css(a, "boxSizing")) : 0)
                }
            }
        }), $.support.opacity || ($.cssHooks.opacity = {
            get: function(a, b) {
                return gc.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
            },
            set: function(a, b) {
                var c = a.style,
                    d = a.currentStyle,
                    e = $.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "",
                    f = d && d.filter || c.filter || "";
                c.zoom = 1, b >= 1 && "" === $.trim(f.replace(fc, "")) && c.removeAttribute && (c.removeAttribute("filter"), d && !d.filter) || (c.filter = fc.test(f) ? f.replace(fc, e) : f + " " + e)
            }
        }), $(function() {
            $.support.reliableMarginRight || ($.cssHooks.marginRight = {
                get: function(a, b) {
                    return $.swap(a, {
                        display: "inline-block"
                    }, function() {
                        return b ? cc(a, "marginRight") : void 0
                    })
                }
            }), !$.support.pixelPosition && $.fn.position && $.each(["top", "left"], function(a, b) {
                $.cssHooks[b] = {
                    get: function(a, c) {
                        if (c) {
                            var d = cc(a, b);
                            return lc.test(d) ? $(a).position()[b] + "px" : d
                        }
                    }
                }
            })
        }), $.expr && $.expr.filters && ($.expr.filters.hidden = function(a) {
            return 0 === a.offsetWidth && 0 === a.offsetHeight || !$.support.reliableHiddenOffsets && "none" === (a.style && a.style.display || cc(a, "display"))
        }, $.expr.filters.visible = function(a) {
            return !$.expr.filters.hidden(a)
        }), $.each({
            margin: "",
            padding: "",
            border: "Width"
        }, function(a, b) {
            $.cssHooks[a + b] = {
                expand: function(c) {
                    var d, e = "string" == typeof c ? c.split(" ") : [c],
                        f = {};
                    for (d = 0; 4 > d; d++) f[a + qc[d] + b] = e[d] || e[d - 2] || e[0];
                    return f
                }
            }, jc.test(a) || ($.cssHooks[a + b].set = t)
        });
        var tc = /%20/g,
            uc = /\[\]$/,
            vc = /\r?\n/g,
            wc = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
            xc = /^(?:select|textarea)/i;
        $.fn.extend({
            serialize: function() {
                return $.param(this.serializeArray())
            },
            serializeArray: function() {
                return this.map(function() {
                    return this.elements ? $.makeArray(this.elements) : this
                }).filter(function() {
                    return this.name && !this.disabled && (this.checked || xc.test(this.nodeName) || wc.test(this.type))
                }).map(function(a, b) {
                    var c = $(this).val();
                    return null == c ? null : $.isArray(c) ? $.map(c, function(a) {
                        return {
                            name: b.name,
                            value: a.replace(vc, "\r\n")
                        }
                    }) : {
                        name: b.name,
                        value: c.replace(vc, "\r\n")
                    }
                }).get()
            }
        }), $.param = function(a, c) {
            var d, e = [],
                f = function(a, b) {
                    b = $.isFunction(b) ? b() : null == b ? "" : b, e[e.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
                };
            if (c === b && (c = $.ajaxSettings && $.ajaxSettings.traditional), $.isArray(a) || a.jquery && !$.isPlainObject(a)) $.each(a, function() {
                f(this.name, this.value)
            });
            else
                for (d in a) x(d, a[d], c, f);
            return e.join("&").replace(tc, "+")
        };
        var yc, zc, Ac = /#.*$/,
            Bc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm,
            Cc = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
            Dc = /^(?:GET|HEAD)$/,
            Ec = /^\/\//,
            Fc = /\?/,
            Gc = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
            Hc = /([?&])_=[^&]*/,
            Ic = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
            Jc = $.fn.load,
            Kc = {},
            Lc = {},
            Mc = ["*/"] + ["*"];
        try {
            zc = Q.href
        } catch (Nc) {
            zc = P.createElement("a"), zc.href = "", zc = zc.href
        }
        yc = Ic.exec(zc.toLowerCase()) || [], $.fn.load = function(a, c, d) {
            if ("string" != typeof a && Jc) return Jc.apply(this, arguments);
            if (!this.length) return this;
            var e, f, g, h = this,
                i = a.indexOf(" ");
            return i >= 0 && (e = a.slice(i, a.length), a = a.slice(0, i)), $.isFunction(c) ? (d = c, c = b) : c && "object" == typeof c && (f = "POST"), $.ajax({
                url: a,
                type: f,
                dataType: "html",
                data: c,
                complete: function(a, b) {
                    d && h.each(d, g || [a.responseText, b, a])
                }
            }).done(function(a) {
                g = arguments, h.html(e ? $("<div>").append(a.replace(Gc, "")).find(e) : a)
            }), this
        }, $.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(a, b) {
            $.fn[b] = function(a) {
                return this.on(b, a)
            }
        }), $.each(["get", "post"], function(a, c) {
            $[c] = function(a, d, e, f) {
                return $.isFunction(d) && (f = f || e, e = d, d = b), $.ajax({
                    type: c,
                    url: a,
                    data: d,
                    success: e,
                    dataType: f
                })
            }
        }), $.extend({
            getScript: function(a, c) {
                return $.get(a, b, c, "script")
            },
            getJSON: function(a, b, c) {
                return $.get(a, b, c, "json")
            },
            ajaxSetup: function(a, b) {
                return b ? A(a, $.ajaxSettings) : (b = a, a = $.ajaxSettings), A(a, b), a
            },
            ajaxSettings: {
                url: zc,
                isLocal: Cc.test(yc[1]),
                global: !0,
                type: "GET",
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
                processData: !0,
                async: !0,
                accepts: {
                    xml: "application/xml, text/xml",
                    html: "text/html",
                    text: "text/plain",
                    json: "application/json, text/javascript",
                    "*": Mc
                },
                contents: {
                    xml: /xml/,
                    html: /html/,
                    json: /json/
                },
                responseFields: {
                    xml: "responseXML",
                    text: "responseText"
                },
                converters: {
                    "* text": a.String,
                    "text html": !0,
                    "text json": $.parseJSON,
                    "text xml": $.parseXML
                },
                flatOptions: {
                    context: !0,
                    url: !0
                }
            },
            ajaxPrefilter: y(Kc),
            ajaxTransport: y(Lc),
            ajax: function(a, c) {
                function d(a, c, d, g) {
                    var j, l, s, t, v, x = c;
                    2 !== u && (u = 2, i && clearTimeout(i), h = b, f = g || "", w.readyState = a > 0 ? 4 : 0, d && (t = B(m, w, d)), a >= 200 && 300 > a || 304 === a ? (m.ifModified && (v = w.getResponseHeader("Last-Modified"), v && ($.lastModified[e] = v), v = w.getResponseHeader("Etag"), v && ($.etag[e] = v)), 304 === a ? (x = "notmodified", j = !0) : (j = C(m, t), x = j.state, l = j.data, s = j.error, j = !s)) : (s = x, (!x || a) && (x = "error", 0 > a && (a = 0))), w.status = a, w.statusText = (c || x) + "", j ? p.resolveWith(n, [l, x, w]) : p.rejectWith(n, [w, x, s]), w.statusCode(r), r = b, k && o.trigger("ajax" + (j ? "Success" : "Error"), [w, m, j ? l : s]), q.fireWith(n, [w, x]), k && (o.trigger("ajaxComplete", [w, m]), --$.active || $.event.trigger("ajaxStop")))
                }
                "object" == typeof a && (c = a, a = b), c = c || {};
                var e, f, g, h, i, j, k, l, m = $.ajaxSetup({}, c),
                    n = m.context || m,
                    o = n !== m && (n.nodeType || n instanceof $) ? $(n) : $.event,
                    p = $.Deferred(),
                    q = $.Callbacks("once memory"),
                    r = m.statusCode || {},
                    s = {},
                    t = {},
                    u = 0,
                    v = "canceled",
                    w = {
                        readyState: 0,
                        setRequestHeader: function(a, b) {
                            if (!u) {
                                var c = a.toLowerCase();
                                a = t[c] = t[c] || a, s[a] = b
                            }
                            return this
                        },
                        getAllResponseHeaders: function() {
                            return 2 === u ? f : null
                        },
                        getResponseHeader: function(a) {
                            var c;
                            if (2 === u) {
                                if (!g)
                                    for (g = {}; c = Bc.exec(f);) g[c[1].toLowerCase()] = c[2];
                                c = g[a.toLowerCase()]
                            }
                            return c === b ? null : c
                        },
                        overrideMimeType: function(a) {
                            return u || (m.mimeType = a), this
                        },
                        abort: function(a) {
                            return a = a || v, h && h.abort(a), d(0, a), this
                        }
                    };
                if (p.promise(w), w.success = w.done, w.error = w.fail, w.complete = q.add, w.statusCode = function(a) {
                        if (a) {
                            var b;
                            if (2 > u)
                                for (b in a) r[b] = [r[b], a[b]];
                            else b = a[w.status], w.always(b)
                        }
                        return this
                    }, m.url = ((a || m.url) + "").replace(Ac, "").replace(Ec, yc[1] + "//"), m.dataTypes = $.trim(m.dataType || "*").toLowerCase().split(bb), null == m.crossDomain && (j = Ic.exec(m.url.toLowerCase()), m.crossDomain = !(!j || j[1] === yc[1] && j[2] === yc[2] && (j[3] || ("http:" === j[1] ? 80 : 443)) == (yc[3] || ("http:" === yc[1] ? 80 : 443)))), m.data && m.processData && "string" != typeof m.data && (m.data = $.param(m.data, m.traditional)), z(Kc, m, c, w), 2 === u) return w;
                if (k = m.global, m.type = m.type.toUpperCase(), m.hasContent = !Dc.test(m.type), k && 0 === $.active++ && $.event.trigger("ajaxStart"), !m.hasContent && (m.data && (m.url += (Fc.test(m.url) ? "&" : "?") + m.data, delete m.data), e = m.url, m.cache === !1)) {
                    var x = $.now(),
                        y = m.url.replace(Hc, "$1_=" + x);
                    m.url = y + (y === m.url ? (Fc.test(m.url) ? "&" : "?") + "_=" + x : "")
                }(m.data && m.hasContent && m.contentType !== !1 || c.contentType) && w.setRequestHeader("Content-Type", m.contentType), m.ifModified && (e = e || m.url, $.lastModified[e] && w.setRequestHeader("If-Modified-Since", $.lastModified[e]), $.etag[e] && w.setRequestHeader("If-None-Match", $.etag[e])), w.setRequestHeader("Accept", m.dataTypes[0] && m.accepts[m.dataTypes[0]] ? m.accepts[m.dataTypes[0]] + ("*" !== m.dataTypes[0] ? ", " + Mc + "; q=0.01" : "") : m.accepts["*"]);
                for (l in m.headers) w.setRequestHeader(l, m.headers[l]);
                if (m.beforeSend && (m.beforeSend.call(n, w, m) === !1 || 2 === u)) return w.abort();
                v = "abort";
                for (l in {
                        success: 1,
                        error: 1,
                        complete: 1
                    }) w[l](m[l]);
                if (h = z(Lc, m, c, w)) {
                    w.readyState = 1, k && o.trigger("ajaxSend", [w, m]), m.async && m.timeout > 0 && (i = setTimeout(function() {
                        w.abort("timeout")
                    }, m.timeout));
                    try {
                        u = 1, h.send(s, d)
                    } catch (A) {
                        if (!(2 > u)) throw A;
                        d(-1, A)
                    }
                } else d(-1, "No Transport");
                return w
            },
            active: 0,
            lastModified: {},
            etag: {}
        });
        var Oc = [],
            Pc = /\?/,
            Qc = /(=)\?(?=&|$)|\?\?/,
            Rc = $.now();
        $.ajaxSetup({
            jsonp: "callback",
            jsonpCallback: function() {
                var a = Oc.pop() || $.expando + "_" + Rc++;
                return this[a] = !0, a
            }
        }), $.ajaxPrefilter("json jsonp", function(c, d, e) {
            var f, g, h, i = c.data,
                j = c.url,
                k = c.jsonp !== !1,
                l = k && Qc.test(j),
                m = k && !l && "string" == typeof i && !(c.contentType || "").indexOf("application/x-www-form-urlencoded") && Qc.test(i);
            return "jsonp" === c.dataTypes[0] || l || m ? (f = c.jsonpCallback = $.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback, g = a[f], l ? c.url = j.replace(Qc, "$1" + f) : m ? c.data = i.replace(Qc, "$1" + f) : k && (c.url += (Pc.test(j) ? "&" : "?") + c.jsonp + "=" + f), c.converters["script json"] = function() {
                return h || $.error(f + " was not called"), h[0]
            }, c.dataTypes[0] = "json", a[f] = function() {
                h = arguments
            }, e.always(function() {
                a[f] = g, c[f] && (c.jsonpCallback = d.jsonpCallback, Oc.push(f)), h && $.isFunction(g) && g(h[0]), h = g = b
            }), "script") : void 0
        }), $.ajaxSetup({
            accepts: {
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
            },
            contents: {
                script: /javascript|ecmascript/
            },
            converters: {
                "text script": function(a) {
                    return $.globalEval(a), a
                }
            }
        }), $.ajaxPrefilter("script", function(a) {
            a.cache === b && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
        }), $.ajaxTransport("script", function(a) {
            if (a.crossDomain) {
                var c, d = P.head || P.getElementsByTagName("head")[0] || P.documentElement;
                return {
                    send: function(e, f) {
                        c = P.createElement("script"), c.async = "async", a.scriptCharset && (c.charset = a.scriptCharset), c.src = a.url, c.onload = c.onreadystatechange = function(a, e) {
                            (e || !c.readyState || /loaded|complete/.test(c.readyState)) && (c.onload = c.onreadystatechange = null, d && c.parentNode && d.removeChild(c), c = b, e || f(200, "success"))
                        }, d.insertBefore(c, d.firstChild)
                    },
                    abort: function() {
                        c && c.onload(0, 1)
                    }
                }
            }
        });
        var Sc, Tc = a.ActiveXObject ? function() {
                for (var a in Sc) Sc[a](0, 1)
            } : !1,
            Uc = 0;
        $.ajaxSettings.xhr = a.ActiveXObject ? function() {
                return !this.isLocal && D() || E()
            } : D,
            function(a) {
                $.extend($.support, {
                    ajax: !!a,
                    cors: !!a && "withCredentials" in a
                })
            }($.ajaxSettings.xhr()), $.support.ajax && $.ajaxTransport(function(c) {
                if (!c.crossDomain || $.support.cors) {
                    var d;
                    return {
                        send: function(e, f) {
                            var g, h, i = c.xhr();
                            if (c.username ? i.open(c.type, c.url, c.async, c.username, c.password) : i.open(c.type, c.url, c.async), c.xhrFields)
                                for (h in c.xhrFields) i[h] = c.xhrFields[h];
                            c.mimeType && i.overrideMimeType && i.overrideMimeType(c.mimeType), c.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest");
                            try {
                                for (h in e) i.setRequestHeader(h, e[h])
                            } catch (j) {}
                            i.send(c.hasContent && c.data || null), d = function(a, e) {
                                var h, j, k, l, m;
                                try {
                                    if (d && (e || 4 === i.readyState))
                                        if (d = b, g && (i.onreadystatechange = $.noop, Tc && delete Sc[g]), e) 4 !== i.readyState && i.abort();
                                        else {
                                            h = i.status, k = i.getAllResponseHeaders(), l = {}, m = i.responseXML, m && m.documentElement && (l.xml = m);
                                            try {
                                                l.text = i.responseText
                                            } catch (n) {}
                                            try {
                                                j = i.statusText
                                            } catch (n) {
                                                j = ""
                                            }
                                            h || !c.isLocal || c.crossDomain ? 1223 === h && (h = 204) : h = l.text ? 200 : 404
                                        }
                                } catch (o) {
                                    e || f(-1, o)
                                }
                                l && f(h, j, l, k)
                            }, c.async ? 4 === i.readyState ? setTimeout(d, 0) : (g = ++Uc, Tc && (Sc || (Sc = {}, $(a).unload(Tc)), Sc[g] = d), i.onreadystatechange = d) : d()
                        },
                        abort: function() {
                            d && d(0, 1)
                        }
                    }
                }
            });
        var Vc, Wc, Xc = /^(?:toggle|show|hide)$/,
            Yc = new RegExp("^(?:([-+])=|)(" + _ + ")([a-z%]*)$", "i"),
            Zc = /queueHooks$/,
            $c = [J],
            _c = {
                "*": [function(a, b) {
                    var c, d, e = this.createTween(a, b),
                        f = Yc.exec(b),
                        g = e.cur(),
                        h = +g || 0,
                        i = 1,
                        j = 20;
                    if (f) {
                        if (c = +f[2], d = f[3] || ($.cssNumber[a] ? "" : "px"), "px" !== d && h) {
                            h = $.css(e.elem, a, !0) || c || 1;
                            do i = i || ".5", h /= i, $.style(e.elem, a, h + d); while (i !== (i = e.cur() / g) && 1 !== i && --j)
                        }
                        e.unit = d, e.start = h, e.end = f[1] ? h + (f[1] + 1) * c : c
                    }
                    return e
                }]
            };
        $.Animation = $.extend(H, {
            tweener: function(a, b) {
                $.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
                for (var c, d = 0, e = a.length; e > d; d++) c = a[d], _c[c] = _c[c] || [], _c[c].unshift(b)
            },
            prefilter: function(a, b) {
                b ? $c.unshift(a) : $c.push(a)
            }
        }), $.Tween = K, K.prototype = {
            constructor: K,
            init: function(a, b, c, d, e, f) {
                this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || ($.cssNumber[c] ? "" : "px")
            },
            cur: function() {
                var a = K.propHooks[this.prop];
                return a && a.get ? a.get(this) : K.propHooks._default.get(this)
            },
            run: function(a) {
                var b, c = K.propHooks[this.prop];
                return this.pos = b = this.options.duration ? $.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : K.propHooks._default.set(this), this
            }
        }, K.prototype.init.prototype = K.prototype, K.propHooks = {
            _default: {
                get: function(a) {
                    var b;
                    return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = $.css(a.elem, a.prop, !1, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
                },
                set: function(a) {
                    $.fx.step[a.prop] ? $.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[$.cssProps[a.prop]] || $.cssHooks[a.prop]) ? $.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
                }
            }
        }, K.propHooks.scrollTop = K.propHooks.scrollLeft = {
            set: function(a) {
                a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
            }
        }, $.each(["toggle", "show", "hide"], function(a, b) {
            var c = $.fn[b];
            $.fn[b] = function(d, e, f) {
                return null == d || "boolean" == typeof d || !a && $.isFunction(d) && $.isFunction(e) ? c.apply(this, arguments) : this.animate(L(b, !0), d, e, f)
            }
        }), $.fn.extend({
            fadeTo: function(a, b, c, d) {
                return this.filter(r).css("opacity", 0).show().end().animate({
                    opacity: b
                }, a, c, d)
            },
            animate: function(a, b, c, d) {
                var e = $.isEmptyObject(a),
                    f = $.speed(b, c, d),
                    g = function() {
                        var b = H(this, $.extend({}, a), f);
                        e && b.stop(!0)
                    };
                return e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
            },
            stop: function(a, c, d) {
                var e = function(a) {
                    var b = a.stop;
                    delete a.stop, b(d)
                };
                return "string" != typeof a && (d = c, c = a, a = b), c && a !== !1 && this.queue(a || "fx", []), this.each(function() {
                    var b = !0,
                        c = null != a && a + "queueHooks",
                        f = $.timers,
                        g = $._data(this);
                    if (c) g[c] && g[c].stop && e(g[c]);
                    else
                        for (c in g) g[c] && g[c].stop && Zc.test(c) && e(g[c]);
                    for (c = f.length; c--;) f[c].elem !== this || null != a && f[c].queue !== a || (f[c].anim.stop(d), b = !1, f.splice(c, 1));
                    (b || !d) && $.dequeue(this, a)
                })
            }
        }), $.each({
            slideDown: L("show"),
            slideUp: L("hide"),
            slideToggle: L("toggle"),
            fadeIn: {
                opacity: "show"
            },
            fadeOut: {
                opacity: "hide"
            },
            fadeToggle: {
                opacity: "toggle"
            }
        }, function(a, b) {
            $.fn[a] = function(a, c, d) {
                return this.animate(b, a, c, d)
            }
        }), $.speed = function(a, b, c) {
            var d = a && "object" == typeof a ? $.extend({}, a) : {
                complete: c || !c && b || $.isFunction(a) && a,
                duration: a,
                easing: c && b || b && !$.isFunction(b) && b
            };
            return d.duration = $.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in $.fx.speeds ? $.fx.speeds[d.duration] : $.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function() {
                $.isFunction(d.old) && d.old.call(this), d.queue && $.dequeue(this, d.queue)
            }, d
        }, $.easing = {
            linear: function(a) {
                return a
            },
            swing: function(a) {
                return .5 - Math.cos(a * Math.PI) / 2
            }
        }, $.timers = [], $.fx = K.prototype.init, $.fx.tick = function() {
            var a, c = $.timers,
                d = 0;
            for (Vc = $.now(); d < c.length; d++) a = c[d], a() || c[d] !== a || c.splice(d--, 1);
            c.length || $.fx.stop(), Vc = b
        }, $.fx.timer = function(a) {
            a() && $.timers.push(a) && !Wc && (Wc = setInterval($.fx.tick, $.fx.interval))
        }, $.fx.interval = 13, $.fx.stop = function() {
            clearInterval(Wc), Wc = null
        }, $.fx.speeds = {
            slow: 600,
            fast: 200,
            _default: 400
        }, $.fx.step = {}, $.expr && $.expr.filters && ($.expr.filters.animated = function(a) {
            return $.grep($.timers, function(b) {
                return a === b.elem
            }).length
        });
        var ad = /^(?:body|html)$/i;
        $.fn.offset = function(a) {
            if (arguments.length) return a === b ? this : this.each(function(b) {
                $.offset.setOffset(this, a, b)
            });
            var c, d, e, f, g, h, i, j = {
                    top: 0,
                    left: 0
                },
                k = this[0],
                l = k && k.ownerDocument;
            if (l) return (d = l.body) === k ? $.offset.bodyOffset(k) : (c = l.documentElement, $.contains(c, k) ? ("undefined" != typeof k.getBoundingClientRect && (j = k.getBoundingClientRect()), e = M(l), f = c.clientTop || d.clientTop || 0, g = c.clientLeft || d.clientLeft || 0, h = e.pageYOffset || c.scrollTop, i = e.pageXOffset || c.scrollLeft, {
                top: j.top + h - f,
                left: j.left + i - g
            }) : j)
        }, $.offset = {
            bodyOffset: function(a) {
                var b = a.offsetTop,
                    c = a.offsetLeft;
                return $.support.doesNotIncludeMarginInBodyOffset && (b += parseFloat($.css(a, "marginTop")) || 0, c += parseFloat($.css(a, "marginLeft")) || 0), {
                    top: b,
                    left: c
                }
            },
            setOffset: function(a, b, c) {
                var d = $.css(a, "position");
                "static" === d && (a.style.position = "relative");
                var e, f, g = $(a),
                    h = g.offset(),
                    i = $.css(a, "top"),
                    j = $.css(a, "left"),
                    k = ("absolute" === d || "fixed" === d) && $.inArray("auto", [i, j]) > -1,
                    l = {},
                    m = {};
                k ? (m = g.position(), e = m.top, f = m.left) : (e = parseFloat(i) || 0, f = parseFloat(j) || 0), $.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (l.top = b.top - h.top + e), null != b.left && (l.left = b.left - h.left + f), "using" in b ? b.using.call(a, l) : g.css(l)
            }
        }, $.fn.extend({
            position: function() {
                if (this[0]) {
                    var a = this[0],
                        b = this.offsetParent(),
                        c = this.offset(),
                        d = ad.test(b[0].nodeName) ? {
                            top: 0,
                            left: 0
                        } : b.offset();
                    return c.top -= parseFloat($.css(a, "marginTop")) || 0, c.left -= parseFloat($.css(a, "marginLeft")) || 0, d.top += parseFloat($.css(b[0], "borderTopWidth")) || 0, d.left += parseFloat($.css(b[0], "borderLeftWidth")) || 0, {
                        top: c.top - d.top,
                        left: c.left - d.left
                    }
                }
            },
            offsetParent: function() {
                return this.map(function() {
                    for (var a = this.offsetParent || P.body; a && !ad.test(a.nodeName) && "static" === $.css(a, "position");) a = a.offsetParent;
                    return a || P.body
                })
            }
        }), $.each({
            scrollLeft: "pageXOffset",
            scrollTop: "pageYOffset"
        }, function(a, c) {
            var d = /Y/.test(c);
            $.fn[a] = function(e) {
                return $.access(this, function(a, e, f) {
                    var g = M(a);
                    return f === b ? g ? c in g ? g[c] : g.document.documentElement[e] : a[e] : (g ? g.scrollTo(d ? $(g).scrollLeft() : f, d ? f : $(g).scrollTop()) : a[e] = f, void 0)
                }, a, e, arguments.length, null)
            }
        }), $.each({
            Height: "height",
            Width: "width"
        }, function(a, c) {
            $.each({
                padding: "inner" + a,
                content: c,
                "": "outer" + a
            }, function(d, e) {
                $.fn[e] = function(e, f) {
                    var g = arguments.length && (d || "boolean" != typeof e),
                        h = d || (e === !0 || f === !0 ? "margin" : "border");
                    return $.access(this, function(c, d, e) {
                        var f;
                        return $.isWindow(c) ? c.document.documentElement["client" + a] : 9 === c.nodeType ? (f = c.documentElement, Math.max(c.body["scroll" + a], f["scroll" + a], c.body["offset" + a], f["offset" + a], f["client" + a])) : e === b ? $.css(c, d, e, h) : $.style(c, d, e, h)
                    }, c, g ? e : b, g, null)
                }
            })
        }), a.jQuery = a.$ = $, "function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
            return $
        })
    }(window),
    function(a, b) {
        var c = 0,
            d = Array.prototype.slice,
            e = a.cleanData;
        a.cleanData = function(b) {
            for (var c, d = 0; null != (c = b[d]); d++) try {
                a(c).triggerHandler("remove")
            } catch (f) {}
            e(b)
        }, a.widget = function(c, d, e) {
            var f, g, h, i, j = {},
                k = c.split(".")[0];
            c = c.split(".")[1], f = k + "-" + c, e || (e = d, d = a.Widget), a.expr[":"][f.toLowerCase()] = function(b) {
                return !!a.data(b, f)
            }, a[k] = a[k] || {}, g = a[k][c], h = a[k][c] = function(a, c) {
                return this._createWidget ? (arguments.length && this._createWidget(a, c), b) : new h(a, c)
            }, a.extend(h, g, {
                version: e.version,
                _proto: a.extend({}, e),
                _childConstructors: []
            }), i = new d, i.options = a.widget.extend({}, i.options), a.each(e, function(c, e) {
                return a.isFunction(e) ? (j[c] = function() {
                    var a = function() {
                            return d.prototype[c].apply(this, arguments)
                        },
                        b = function(a) {
                            return d.prototype[c].apply(this, a)
                        };
                    return function() {
                        var c, d = this._super,
                            f = this._superApply;
                        return this._super = a, this._superApply = b, c = e.apply(this, arguments), this._super = d, this._superApply = f, c
                    }
                }(), b) : (j[c] = e, b)
            }), h.prototype = a.widget.extend(i, {
                widgetEventPrefix: g ? i.widgetEventPrefix : c
            }, j, {
                constructor: h,
                namespace: k,
                widgetName: c,
                widgetFullName: f
            }), g ? (a.each(g._childConstructors, function(b, c) {
                var d = c.prototype;
                a.widget(d.namespace + "." + d.widgetName, h, c._proto)
            }), delete g._childConstructors) : d._childConstructors.push(h), a.widget.bridge(c, h)
        }, a.widget.extend = function(c) {
            for (var e, f, g = d.call(arguments, 1), h = 0, i = g.length; i > h; h++)
                for (e in g[h]) f = g[h][e], g[h].hasOwnProperty(e) && f !== b && (c[e] = a.isPlainObject(f) ? a.isPlainObject(c[e]) ? a.widget.extend({}, c[e], f) : a.widget.extend({}, f) : f);
            return c
        }, a.widget.bridge = function(c, e) {
            var f = e.prototype.widgetFullName || c;
            a.fn[c] = function(g) {
                var h = "string" == typeof g,
                    i = d.call(arguments, 1),
                    j = this;
                return g = !h && i.length ? a.widget.extend.apply(null, [g].concat(i)) : g, h ? this.each(function() {
                    var d, e = a.data(this, f);
                    return e ? a.isFunction(e[g]) && "_" !== g.charAt(0) ? (d = e[g].apply(e, i), d !== e && d !== b ? (j = d && d.jquery ? j.pushStack(d.get()) : d, !1) : b) : a.error("no such method '" + g + "' for " + c + " widget instance") : a.error("cannot call methods on " + c + " prior to initialization; " + "attempted to call method '" + g + "'")
                }) : this.each(function() {
                    var b = a.data(this, f);
                    b ? b.option(g || {})._init() : a.data(this, f, new e(g, this))
                }), j
            }
        }, a.Widget = function() {}, a.Widget._childConstructors = [], a.Widget.prototype = {
            widgetName: "widget",
            widgetEventPrefix: "",
            defaultElement: "<div>",
            options: {
                disabled: !1,
                create: null
            },
            _createWidget: function(b, d) {
                d = a(d || this.defaultElement || this)[0], this.element = a(d), this.uuid = c++, this.eventNamespace = "." + this.widgetName + this.uuid, this.options = a.widget.extend({}, this.options, this._getCreateOptions(), b), this.bindings = a(), this.hoverable = a(), this.focusable = a(), d !== this && (a.data(d, this.widgetFullName, this), this._on(!0, this.element, {
                    remove: function(a) {
                        a.target === d && this.destroy()
                    }
                }), this.document = a(d.style ? d.ownerDocument : d.document || d), this.window = a(this.document[0].defaultView || this.document[0].parentWindow)), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
            },
            _getCreateOptions: a.noop,
            _getCreateEventData: a.noop,
            _create: a.noop,
            _init: a.noop,
            destroy: function() {
                this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
            },
            _destroy: a.noop,
            widget: function() {
                return this.element
            },
            option: function(c, d) {
                var e, f, g, h = c;
                if (0 === arguments.length) return a.widget.extend({}, this.options);
                if ("string" == typeof c)
                    if (h = {}, e = c.split("."), c = e.shift(), e.length) {
                        for (f = h[c] = a.widget.extend({}, this.options[c]), g = 0; e.length - 1 > g; g++) f[e[g]] = f[e[g]] || {}, f = f[e[g]];
                        if (c = e.pop(), d === b) return f[c] === b ? null : f[c];
                        f[c] = d
                    } else {
                        if (d === b) return this.options[c] === b ? null : this.options[c];
                        h[c] = d
                    }
                return this._setOptions(h), this
            },
            _setOptions: function(a) {
                var b;
                for (b in a) this._setOption(b, a[b]);
                return this
            },
            _setOption: function(a, b) {
                return this.options[a] = b, "disabled" === a && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!b).attr("aria-disabled", b), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")), this
            },
            enable: function() {
                return this._setOption("disabled", !1)
            },
            disable: function() {
                return this._setOption("disabled", !0)
            },
            _on: function(c, d, e) {
                var f, g = this;
                "boolean" != typeof c && (e = d, d = c, c = !1), e ? (d = f = a(d), this.bindings = this.bindings.add(d)) : (e = d, d = this.element, f = this.widget()), a.each(e, function(e, h) {
                    function i() {
                        return c || g.options.disabled !== !0 && !a(this).hasClass("ui-state-disabled") ? ("string" == typeof h ? g[h] : h).apply(g, arguments) : b
                    }
                    "string" != typeof h && (i.guid = h.guid = h.guid || i.guid || a.guid++);
                    var j = e.match(/^(\w+)\s*(.*)$/),
                        k = j[1] + g.eventNamespace,
                        l = j[2];
                    l ? f.delegate(l, k, i) : d.bind(k, i)
                })
            },
            _off: function(a, b) {
                b = (b || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, a.unbind(b).undelegate(b)
            },
            _delay: function(a, b) {
                function c() {
                    return ("string" == typeof a ? d[a] : a).apply(d, arguments)
                }
                var d = this;
                return setTimeout(c, b || 0)
            },
            _hoverable: function(b) {
                this.hoverable = this.hoverable.add(b), this._on(b, {
                    mouseenter: function(b) {
                        a(b.currentTarget).addClass("ui-state-hover")
                    },
                    mouseleave: function(b) {
                        a(b.currentTarget).removeClass("ui-state-hover")
                    }
                })
            },
            _focusable: function(b) {
                this.focusable = this.focusable.add(b), this._on(b, {
                    focusin: function(b) {
                        a(b.currentTarget).addClass("ui-state-focus")
                    },
                    focusout: function(b) {
                        a(b.currentTarget).removeClass("ui-state-focus")
                    }
                })
            },
            _trigger: function(b, c, d) {
                var e, f, g = this.options[b];
                if (d = d || {}, c = a.Event(c), c.type = (b === this.widgetEventPrefix ? b : this.widgetEventPrefix + b).toLowerCase(), c.target = this.element[0], f = c.originalEvent)
                    for (e in f) e in c || (c[e] = f[e]);
                return this.element.trigger(c, d), !(a.isFunction(g) && g.apply(this.element[0], [c].concat(d)) === !1 || c.isDefaultPrevented())
            }
        }, a.each({
            show: "fadeIn",
            hide: "fadeOut"
        }, function(b, c) {
            a.Widget.prototype["_" + b] = function(d, e, f) {
                "string" == typeof e && (e = {
                    effect: e
                });
                var g, h = e ? e === !0 || "number" == typeof e ? c : e.effect || c : b;
                e = e || {}, "number" == typeof e && (e = {
                    duration: e
                }), g = !a.isEmptyObject(e), e.complete = f, e.delay && d.delay(e.delay), g && a.effects && a.effects.effect[h] ? d[b](e) : h !== b && d[h] ? d[h](e.duration, e.easing, f) : d.queue(function(c) {
                    a(this)[b](), f && f.call(d[0]), c()
                })
            }
        })
    }(jQuery),
    function(a, b) {
        function c(b, c) {
            var e, f;
            return e = b.nodeName.toLowerCase(), "area" === e ? (e = b.parentNode, f = e.name, b.href && f && "map" === e.nodeName.toLowerCase() ? (e = a("img[usemap=#" + f + "]")[0], !!e && d(e)) : !1) : (/input|select|textarea|button|object/.test(e) ? !b.disabled : "a" === e ? b.href || c : c) && d(b)
        }

        function d(b) {
            return a.expr.filters.visible(b) && !a(b).parents().addBack().filter(function() {
                return "hidden" === a.css(this, "visibility")
            }).length
        }
        var e = 0,
            f = /^ui-id-\d+$/;
        if (a.ui = a.ui || {}, a.extend(a.ui, {
                version: "1.10.2",
                keyCode: {
                    BACKSPACE: 8,
                    COMMA: 188,
                    DELETE: 46,
                    DOWN: 40,
                    END: 35,
                    ENTER: 13,
                    ESCAPE: 27,
                    HOME: 36,
                    LEFT: 37,
                    NUMPAD_ADD: 107,
                    NUMPAD_DECIMAL: 110,
                    NUMPAD_DIVIDE: 111,
                    NUMPAD_ENTER: 108,
                    NUMPAD_MULTIPLY: 106,
                    NUMPAD_SUBTRACT: 109,
                    PAGE_DOWN: 34,
                    PAGE_UP: 33,
                    PERIOD: 190,
                    RIGHT: 39,
                    SPACE: 32,
                    TAB: 9,
                    UP: 38
                }
            }), a.fn.extend({
                focus: function(b) {
                    return function(c, d) {
                        return "number" == typeof c ? this.each(function() {
                            var b = this;
                            setTimeout(function() {
                                a(b).focus(), d && d.call(b)
                            }, c)
                        }) : b.apply(this, arguments)
                    }
                }(a.fn.focus),
                scrollParent: function() {
                    var b;
                    return b = a.ui.ie && /(static|relative)/.test(this.css("position")) || /absolute/.test(this.css("position")) ? this.parents().filter(function() {
                        return /(relative|absolute|fixed)/.test(a.css(this, "position")) && /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
                    }).eq(0) : this.parents().filter(function() {
                        return /(auto|scroll)/.test(a.css(this, "overflow") + a.css(this, "overflow-y") + a.css(this, "overflow-x"))
                    }).eq(0), /fixed/.test(this.css("position")) || !b.length ? a(document) : b
                },
                zIndex: function(c) {
                    if (c !== b) return this.css("zIndex", c);
                    if (this.length) {
                        c = a(this[0]);
                        for (var d; c.length && c[0] !== document;) {
                            if (d = c.css("position"), ("absolute" === d || "relative" === d || "fixed" === d) && (d = parseInt(c.css("zIndex"), 10), !isNaN(d) && 0 !== d)) return d;
                            c = c.parent()
                        }
                    }
                    return 0
                },
                uniqueId: function() {
                    return this.each(function() {
                        this.id || (this.id = "ui-id-" + ++e)
                    })
                },
                removeUniqueId: function() {
                    return this.each(function() {
                        f.test(this.id) && a(this).removeAttr("id")
                    })
                }
            }), a.extend(a.expr[":"], {
                data: a.expr.createPseudo ? a.expr.createPseudo(function(b) {
                    return function(c) {
                        return !!a.data(c, b)
                    }
                }) : function(b, c, d) {
                    return !!a.data(b, d[3])
                },
                focusable: function(b) {
                    return c(b, !isNaN(a.attr(b, "tabindex")))
                },
                tabbable: function(b) {
                    var d = a.attr(b, "tabindex"),
                        e = isNaN(d);
                    return (e || d >= 0) && c(b, !e)
                }
            }), a("<a>").outerWidth(1).jquery || a.each(["Width", "Height"], function(c, d) {
                function e(b, c, d, e) {
                    return a.each(f, function() {
                        c -= parseFloat(a.css(b, "padding" + this)) || 0, d && (c -= parseFloat(a.css(b, "border" + this + "Width")) || 0), e && (c -= parseFloat(a.css(b, "margin" + this)) || 0)
                    }), c
                }
                var f = "Width" === d ? ["Left", "Right"] : ["Top", "Bottom"],
                    g = d.toLowerCase(),
                    h = {
                        innerWidth: a.fn.innerWidth,
                        innerHeight: a.fn.innerHeight,
                        outerWidth: a.fn.outerWidth,
                        outerHeight: a.fn.outerHeight
                    };
                a.fn["inner" + d] = function(c) {
                    return c === b ? h["inner" + d].call(this) : this.each(function() {
                        a(this).css(g, e(this, c) + "px")
                    })
                }, a.fn["outer" + d] = function(b, c) {
                    return "number" != typeof b ? h["outer" + d].call(this, b) : this.each(function() {
                        a(this).css(g, e(this, b, !0, c) + "px")
                    })
                }
            }), a.fn.addBack || (a.fn.addBack = function(a) {
                return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
            }), a("<a>").data("a-b", "a").removeData("a-b").data("a-b")) {
            var g = a.fn.removeData;
            a.fn.removeData = function(b) {
                return arguments.length ? g.call(this, a.camelCase(b)) : g.call(this)
            }
        }
        a.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), a.support.selectstart = "onselectstart" in document.createElement("div"), a.fn.extend({
            disableSelection: function() {
                return this.bind((a.support.selectstart ? "selectstart" : "mousedown") + ".ui-disableSelection", function(a) {
                    a.preventDefault()
                })
            },
            enableSelection: function() {
                return this.unbind(".ui-disableSelection")
            }
        }), a.extend(a.ui, {
            plugin: {
                add: function(b, c, d) {
                    var e;
                    b = a.ui[b].prototype;
                    for (e in d) b.plugins[e] = b.plugins[e] || [], b.plugins[e].push([c, d[e]])
                },
                call: function(a, b, c) {
                    var d = a.plugins[b];
                    if (d && a.element[0].parentNode && 11 !== a.element[0].parentNode.nodeType)
                        for (b = 0; b < d.length; b++) a.options[d[b][0]] && d[b][1].apply(a.element, c)
                }
            },
            hasScroll: function(b, c) {
                if ("hidden" === a(b).css("overflow")) return !1;
                var d = c && "left" === c ? "scrollLeft" : "scrollTop",
                    e = !1;
                return 0 < b[d] ? !0 : (b[d] = 1, e = 0 < b[d], b[d] = 0, e)
            }
        })
    }(jQuery),
    function(a) {
        var b = !1;
        a(document).mouseup(function() {
            b = !1
        }), a.widget("ui.mouse", {
            version: "1.10.2",
            options: {
                cancel: "input,textarea,button,select,option",
                distance: 1,
                delay: 0
            },
            _mouseInit: function() {
                var b = this;
                this.element.bind("mousedown." + this.widgetName, function(a) {
                    return b._mouseDown(a)
                }).bind("click." + this.widgetName, function(c) {
                    return !0 === a.data(c.target, b.widgetName + ".preventClickEvent") ? (a.removeData(c.target, b.widgetName + ".preventClickEvent"), c.stopImmediatePropagation(), !1) : void 0
                }), this.started = !1
            },
            _mouseDestroy: function() {
                this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && a(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
            },
            _mouseDown: function(c) {
                if (!b) {
                    this._mouseStarted && this._mouseUp(c), this._mouseDownEvent = c;
                    var d = this,
                        e = 1 === c.which,
                        f = "string" == typeof this.options.cancel && c.target.nodeName ? a(c.target).closest(this.options.cancel).length : !1;
                    return e && !f && this._mouseCapture(c) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function() {
                        d.mouseDelayMet = !0
                    }, this.options.delay)), this._mouseDistanceMet(c) && this._mouseDelayMet(c) && (this._mouseStarted = !1 !== this._mouseStart(c), !this._mouseStarted) ? (c.preventDefault(), !0) : (!0 === a.data(c.target, this.widgetName + ".preventClickEvent") && a.removeData(c.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function(a) {
                        return d._mouseMove(a)
                    }, this._mouseUpDelegate = function(a) {
                        return d._mouseUp(a)
                    }, a(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), c.preventDefault(), b = !0)) : !0
                }
            },
            _mouseMove: function(b) {
                return a.ui.ie && (!document.documentMode || 9 > document.documentMode) && !b.button ? this._mouseUp(b) : this._mouseStarted ? (this._mouseDrag(b), b.preventDefault()) : (this._mouseDistanceMet(b) && this._mouseDelayMet(b) && ((this._mouseStarted = !1 !== this._mouseStart(this._mouseDownEvent, b)) ? this._mouseDrag(b) : this._mouseUp(b)), !this._mouseStarted)
            },
            _mouseUp: function(b) {
                return a(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, b.target === this._mouseDownEvent.target && a.data(b.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(b)), !1
            },
            _mouseDistanceMet: function(a) {
                return Math.max(Math.abs(this._mouseDownEvent.pageX - a.pageX), Math.abs(this._mouseDownEvent.pageY - a.pageY)) >= this.options.distance
            },
            _mouseDelayMet: function() {
                return this.mouseDelayMet
            },
            _mouseStart: function() {},
            _mouseDrag: function() {},
            _mouseStop: function() {},
            _mouseCapture: function() {
                return !0
            }
        })
    }(jQuery),
    function(a) {
        function b(a) {
            return /left|right/.test(a.css("float")) || /inline|table-cell/.test(a.css("display"))
        }
        a.widget("ui.sortable", a.ui.mouse, {
            version: "1.10.2",
            widgetEventPrefix: "sort",
            ready: !1,
            options: {
                appendTo: "parent",
                axis: !1,
                connectWith: !1,
                containment: !1,
                cursor: "auto",
                cursorAt: !1,
                dropOnEmpty: !0,
                forcePlaceholderSize: !1,
                forceHelperSize: !1,
                grid: !1,
                handle: !1,
                helper: "original",
                items: "> *",
                opacity: !1,
                placeholder: !1,
                revert: !1,
                scroll: !0,
                scrollSensitivity: 20,
                scrollSpeed: 20,
                scope: "default",
                tolerance: "intersect",
                zIndex: 1e3,
                activate: null,
                beforeStop: null,
                change: null,
                deactivate: null,
                out: null,
                over: null,
                receive: null,
                remove: null,
                sort: null,
                start: null,
                stop: null,
                update: null
            },
            _create: function() {
                var a = this.options;
                this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.floating = this.items.length ? "x" === a.axis || b(this.items[0].item) : !1, this.offset = this.element.offset(), this._mouseInit(), this.ready = !0
            },
            _destroy: function() {
                this.element.removeClass("ui-sortable ui-sortable-disabled"), this._mouseDestroy();
                for (var a = this.items.length - 1; a >= 0; a--) this.items[a].item.removeData(this.widgetName + "-item");
                return this
            },
            _setOption: function(b, c) {
                "disabled" === b ? (this.options[b] = c, this.widget().toggleClass("ui-sortable-disabled", !!c)) : a.Widget.prototype._setOption.apply(this, arguments)
            },
            _mouseCapture: function(b, c) {
                var d = null,
                    e = !1,
                    f = this;
                return this.reverting || this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(b), a(b.target).parents().each(function() {
                    return a.data(this, f.widgetName + "-item") === f ? (d = a(this), !1) : void 0
                }), a.data(b.target, f.widgetName + "-item") === f && (d = a(b.target)), !d || this.options.handle && !c && (a(this.options.handle, d).find("*").addBack().each(function() {
                    this === b.target && (e = !0)
                }), !e) ? !1 : (this.currentItem = d, this._removeCurrentsFromItems(), !0))
            },
            _mouseStart: function(b, c, d) {
                var e;
                if (c = this.options, this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(b), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
                        top: this.offset.top - this.margins.top,
                        left: this.offset.left - this.margins.left
                    }, a.extend(this.offset, {
                        click: {
                            left: b.pageX - this.offset.left,
                            top: b.pageY - this.offset.top
                        },
                        parent: this._getParentOffset(),
                        relative: this._getRelativeOffset()
                    }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(b), this.originalPageX = b.pageX, this.originalPageY = b.pageY, c.cursorAt && this._adjustOffsetFromHelper(c.cursorAt), this.domPosition = {
                        prev: this.currentItem.prev()[0],
                        parent: this.currentItem.parent()[0]
                    }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), c.containment && this._setContainment(), c.cursor && "auto" !== c.cursor && (e = this.document.find("body"), this.storedCursor = e.css("cursor"), e.css("cursor", c.cursor), this.storedStylesheet = a("<style>*{ cursor: " + c.cursor + " !important; }</style>").appendTo(e)), c.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", c.opacity)), c.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", c.zIndex)), this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", b, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !d)
                    for (d = this.containers.length - 1; d >= 0; d--) this.containers[d]._trigger("activate", b, this._uiHash(this));
                return a.ui.ddmanager && (a.ui.ddmanager.current = this), a.ui.ddmanager && !c.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(b), !0
            },
            _mouseDrag: function(b) {
                var c, d, e, f;
                for (c = this.options, d = !1, this.position = this._generatePosition(b), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== document && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - b.pageY < c.scrollSensitivity ? this.scrollParent[0].scrollTop = d = this.scrollParent[0].scrollTop + c.scrollSpeed : b.pageY - this.overflowOffset.top < c.scrollSensitivity && (this.scrollParent[0].scrollTop = d = this.scrollParent[0].scrollTop - c.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - b.pageX < c.scrollSensitivity ? this.scrollParent[0].scrollLeft = d = this.scrollParent[0].scrollLeft + c.scrollSpeed : b.pageX - this.overflowOffset.left < c.scrollSensitivity && (this.scrollParent[0].scrollLeft = d = this.scrollParent[0].scrollLeft - c.scrollSpeed)) : (b.pageY - a(document).scrollTop() < c.scrollSensitivity ? d = a(document).scrollTop(a(document).scrollTop() - c.scrollSpeed) : a(window).height() - (b.pageY - a(document).scrollTop()) < c.scrollSensitivity && (d = a(document).scrollTop(a(document).scrollTop() + c.scrollSpeed)), b.pageX - a(document).scrollLeft() < c.scrollSensitivity ? d = a(document).scrollLeft(a(document).scrollLeft() - c.scrollSpeed) : a(window).width() - (b.pageX - a(document).scrollLeft()) < c.scrollSensitivity && (d = a(document).scrollLeft(a(document).scrollLeft() + c.scrollSpeed))), !1 !== d && a.ui.ddmanager && !c.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), c = this.items.length - 1; c >= 0; c--)
                    if (d = this.items[c], e = d.item[0], (f = this._intersectsWithPointer(d)) && d.instance === this.currentContainer && e !== this.currentItem[0] && this.placeholder[1 === f ? "next" : "prev"]()[0] !== e && !a.contains(this.placeholder[0], e) && ("semi-dynamic" === this.options.type ? !a.contains(this.element[0], e) : 1)) {
                        if (this.direction = 1 === f ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(d)) break;
                        this._rearrange(b, d), this._trigger("change", b, this._uiHash());
                        break
                    }
                return this._contactContainers(b), a.ui.ddmanager && a.ui.ddmanager.drag(this, b), this._trigger("sort", b, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
            },
            _mouseStop: function(b, c) {
                if (b) {
                    if (a.ui.ddmanager && !this.options.dropBehaviour && a.ui.ddmanager.drop(this, b), this.options.revert) {
                        var d = this,
                            e = this.placeholder.offset(),
                            f = this.options.axis,
                            g = {};
                        f && "x" !== f || (g.left = e.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollLeft)), f && "y" !== f || (g.top = e.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === document.body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, a(this.helper).animate(g, parseInt(this.options.revert, 10) || 500, function() {
                            d._clear(b)
                        })
                    } else this._clear(b, c);
                    return !1
                }
            },
            cancel: function() {
                if (this.dragging) {
                    this._mouseUp({
                        target: null
                    }), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
                    for (var b = this.containers.length - 1; b >= 0; b--) this.containers[b]._trigger("deactivate", null, this._uiHash(this)), this.containers[b].containerCache.over && (this.containers[b]._trigger("out", null, this._uiHash(this)), this.containers[b].containerCache.over = 0)
                }
                return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), a.extend(this, {
                    helper: null,
                    dragging: !1,
                    reverting: !1,
                    _noFinalSort: null
                }), this.domPosition.prev ? a(this.domPosition.prev).after(this.currentItem) : a(this.domPosition.parent).prepend(this.currentItem)), this
            },
            serialize: function(b) {
                var c = this._getItemsAsjQuery(b && b.connected),
                    d = [];
                return b = b || {}, a(c).each(function() {
                    var c = (a(b.item || this).attr(b.attribute || "id") || "").match(b.expression || /(.+)[\-=_](.+)/);
                    c && d.push((b.key || c[1] + "[]") + "=" + (b.key && b.expression ? c[1] : c[2]))
                }), !d.length && b.key && d.push(b.key + "="), d.join("&")
            },
            toArray: function(b) {
                var c = this._getItemsAsjQuery(b && b.connected),
                    d = [];
                return b = b || {}, c.each(function() {
                    d.push(a(b.item || this).attr(b.attribute || "id") || "")
                }), d
            },
            _intersectsWith: function(a) {
                var b = this.positionAbs.left,
                    c = b + this.helperProportions.width,
                    d = this.positionAbs.top,
                    e = d + this.helperProportions.height,
                    f = a.left,
                    g = f + a.width,
                    h = a.top,
                    i = h + a.height,
                    j = this.offset.click.top,
                    k = this.offset.click.left;
                return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > a[this.floating ? "width" : "height"] ? d + j > h && i > d + j && b + k > f && g > b + k : f < b + this.helperProportions.width / 2 && c - this.helperProportions.width / 2 < g && h < d + this.helperProportions.height / 2 && e - this.helperProportions.height / 2 < i
            },
            _intersectsWithPointer: function(a) {
                var b = "y" === this.options.axis || this.positionAbs.left + this.offset.click.left > a.left && this.positionAbs.left + this.offset.click.left < a.left + a.width;
                a = ("x" === this.options.axis || this.positionAbs.top + this.offset.click.top > a.top && this.positionAbs.top + this.offset.click.top < a.top + a.height) && b;
                var b = this._getDragVerticalDirection(),
                    c = this._getDragHorizontalDirection();
                return a ? this.floating ? c && "right" === c || "down" === b ? 2 : 1 : b && ("down" === b ? 2 : 1) : !1
            },
            _intersectsWithSides: function(a) {
                var b = this.positionAbs.top + this.offset.click.top > a.top + a.height / 2 && this.positionAbs.top + this.offset.click.top < a.top + a.height / 2 + a.height;
                a = this.positionAbs.left + this.offset.click.left > a.left + a.width / 2 && this.positionAbs.left + this.offset.click.left < a.left + a.width / 2 + a.width;
                var c = this._getDragVerticalDirection(),
                    d = this._getDragHorizontalDirection();
                return this.floating && d ? "right" === d && a || "left" === d && !a : c && ("down" === c && b || "up" === c && !b)
            },
            _getDragVerticalDirection: function() {
                var a = this.positionAbs.top - this.lastPositionAbs.top;
                return 0 !== a && (a > 0 ? "down" : "up")
            },
            _getDragHorizontalDirection: function() {
                var a = this.positionAbs.left - this.lastPositionAbs.left;
                return 0 !== a && (a > 0 ? "right" : "left")
            },
            refresh: function(a) {
                return this._refreshItems(a), this.refreshPositions(), this
            },
            _connectWith: function() {
                var a = this.options;
                return a.connectWith.constructor === String ? [a.connectWith] : a.connectWith
            },
            _getItemsAsjQuery: function(b) {
                var c, d, e, f = [],
                    g = [],
                    h = this._connectWith();
                if (h && b)
                    for (b = h.length - 1; b >= 0; b--)
                        for (d = a(h[b]), c = d.length - 1; c >= 0; c--)(e = a.data(d[c], this.widgetFullName)) && e !== this && !e.options.disabled && g.push([a.isFunction(e.options.items) ? e.options.items.call(e.element) : a(e.options.items, e.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), e]);
                for (g.push([a.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
                        options: this.options,
                        item: this.currentItem
                    }) : a(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), b = g.length - 1; b >= 0; b--) g[b][0].each(function() {
                    f.push(this)
                });
                return a(f)
            },
            _removeCurrentsFromItems: function() {
                var b = this.currentItem.find(":data(" + this.widgetName + "-item)");
                this.items = a.grep(this.items, function(a) {
                    for (var c = 0; c < b.length; c++)
                        if (b[c] === a.item[0]) return !1;
                    return !0
                })
            },
            _refreshItems: function(b) {
                this.items = [], this.containers = [this];
                var c, d, e, f, g, h = this.items,
                    i = [
                        [a.isFunction(this.options.items) ? this.options.items.call(this.element[0], b, {
                            item: this.currentItem
                        }) : a(this.options.items, this.element), this]
                    ];
                if ((g = this._connectWith()) && this.ready)
                    for (c = g.length - 1; c >= 0; c--)
                        for (e = a(g[c]), d = e.length - 1; d >= 0; d--)(f = a.data(e[d], this.widgetFullName)) && f !== this && !f.options.disabled && (i.push([a.isFunction(f.options.items) ? f.options.items.call(f.element[0], b, {
                            item: this.currentItem
                        }) : a(f.options.items, f.element), f]), this.containers.push(f));
                for (c = i.length - 1; c >= 0; c--)
                    for (b = i[c][1], e = i[c][0], d = 0, g = e.length; g > d; d++) f = a(e[d]), f.data(this.widgetName + "-item", b), h.push({
                        item: f,
                        instance: b,
                        width: 0,
                        height: 0,
                        left: 0,
                        top: 0
                    })
            },
            refreshPositions: function(b) {
                this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
                var c, d, e;
                for (c = this.items.length - 1; c >= 0; c--) d = this.items[c], d.instance !== this.currentContainer && this.currentContainer && d.item[0] !== this.currentItem[0] || (e = this.options.toleranceElement ? a(this.options.toleranceElement, d.item) : d.item, b || (d.width = e.outerWidth(), d.height = e.outerHeight()), e = e.offset(), d.left = e.left, d.top = e.top);
                if (this.options.custom && this.options.custom.refreshContainers) this.options.custom.refreshContainers.call(this);
                else
                    for (c = this.containers.length - 1; c >= 0; c--) e = this.containers[c].element.offset(), this.containers[c].containerCache.left = e.left, this.containers[c].containerCache.top = e.top, this.containers[c].containerCache.width = this.containers[c].element.outerWidth(), this.containers[c].containerCache.height = this.containers[c].element.outerHeight();
                return this
            },
            _createPlaceholder: function(b) {
                b = b || this;
                var c, d = b.options;
                d.placeholder && d.placeholder.constructor !== String || (c = d.placeholder, d.placeholder = {
                    element: function() {
                        var d = b.currentItem[0].nodeName.toLowerCase(),
                            e = a(b.document[0].createElement(d)).addClass(c || b.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
                        return "tr" === d ? e.append("<td colspan='99'>&#160;</td>") : "img" === d && e.attr("src", b.currentItem.attr("src")), c || e.css("visibility", "hidden"), e
                    },
                    update: function(a, e) {
                        (!c || d.forcePlaceholderSize) && (e.height() || e.height(b.currentItem.innerHeight() - parseInt(b.currentItem.css("paddingTop") || 0, 10) - parseInt(b.currentItem.css("paddingBottom") || 0, 10)), e.width() || e.width(b.currentItem.innerWidth() - parseInt(b.currentItem.css("paddingLeft") || 0, 10) - parseInt(b.currentItem.css("paddingRight") || 0, 10)))
                    }
                }), b.placeholder = a(d.placeholder.element.call(b.element, b.currentItem)), b.currentItem.after(b.placeholder), d.placeholder.update(b, b.placeholder)
            },
            _contactContainers: function(c) {
                var d, e, f, g, h, i, j, k, l, m = e = null;
                for (d = this.containers.length - 1; d >= 0; d--) a.contains(this.currentItem[0], this.containers[d].element[0]) || (this._intersectsWith(this.containers[d].containerCache) ? e && a.contains(this.containers[d].element[0], e.element[0]) || (e = this.containers[d], m = d) : this.containers[d].containerCache.over && (this.containers[d]._trigger("out", c, this._uiHash(this)), this.containers[d].containerCache.over = 0));
                if (e)
                    if (1 === this.containers.length) this.containers[m].containerCache.over || (this.containers[m]._trigger("over", c, this._uiHash(this)), this.containers[m].containerCache.over = 1);
                    else {
                        for (d = 1e4, f = null, g = (l = e.floating || b(this.currentItem)) ? "left" : "top", h = l ? "width" : "height", i = this.positionAbs[g] + this.offset.click[g], e = this.items.length - 1; e >= 0; e--) a.contains(this.containers[m].element[0], this.items[e].item[0]) && this.items[e].item[0] !== this.currentItem[0] && (!l || this.positionAbs.top + this.offset.click.top > this.items[e].top && this.positionAbs.top + this.offset.click.top < this.items[e].top + this.items[e].height) && (j = this.items[e].item.offset()[g], k = !1, Math.abs(j - i) > Math.abs(j + this.items[e][h] - i) && (k = !0, j += this.items[e][h]), Math.abs(j - i) < d && (d = Math.abs(j - i), f = this.items[e], this.direction = k ? "up" : "down"));
                        (f || this.options.dropOnEmpty) && this.currentContainer !== this.containers[m] && (f ? this._rearrange(c, f, null, !0) : this._rearrange(c, null, this.containers[m].element, !0), this._trigger("change", c, this._uiHash()), this.containers[m]._trigger("change", c, this._uiHash(this)), this.currentContainer = this.containers[m], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[m]._trigger("over", c, this._uiHash(this)), this.containers[m].containerCache.over = 1)
                    }
            },
            _createHelper: function(b) {
                var c = this.options;
                return b = a.isFunction(c.helper) ? a(c.helper.apply(this.element[0], [b, this.currentItem])) : "clone" === c.helper ? this.currentItem.clone() : this.currentItem, b.parents("body").length || a("parent" !== c.appendTo ? c.appendTo : this.currentItem[0].parentNode)[0].appendChild(b[0]), b[0] === this.currentItem[0] && (this._storedCSS = {
                    width: this.currentItem[0].style.width,
                    height: this.currentItem[0].style.height,
                    position: this.currentItem.css("position"),
                    top: this.currentItem.css("top"),
                    left: this.currentItem.css("left")
                }), (!b[0].style.width || c.forceHelperSize) && b.width(this.currentItem.width()), (!b[0].style.height || c.forceHelperSize) && b.height(this.currentItem.height()), b
            },
            _adjustOffsetFromHelper: function(b) {
                "string" == typeof b && (b = b.split(" ")), a.isArray(b) && (b = {
                    left: +b[0],
                    top: +b[1] || 0
                }), "left" in b && (this.offset.click.left = b.left + this.margins.left), "right" in b && (this.offset.click.left = this.helperProportions.width - b.right + this.margins.left), "top" in b && (this.offset.click.top = b.top + this.margins.top), "bottom" in b && (this.offset.click.top = this.helperProportions.height - b.bottom + this.margins.top)
            },
            _getParentOffset: function() {
                this.offsetParent = this.helper.offsetParent();
                var b = this.offsetParent.offset();
                return "absolute" === this.cssPosition && this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) && (b.left += this.scrollParent.scrollLeft(), b.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && a.ui.ie) && (b = {
                    top: 0,
                    left: 0
                }), {
                    top: b.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                    left: b.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
                }
            },
            _getRelativeOffset: function() {
                if ("relative" === this.cssPosition) {
                    var a = this.currentItem.position();
                    return {
                        top: a.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                        left: a.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                    }
                }
                return {
                    top: 0,
                    left: 0
                }
            },
            _cacheMargins: function() {
                this.margins = {
                    left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
                    top: parseInt(this.currentItem.css("marginTop"), 10) || 0
                }
            },
            _cacheHelperProportions: function() {
                this.helperProportions = {
                    width: this.helper.outerWidth(),
                    height: this.helper.outerHeight()
                }
            },
            _setContainment: function() {
                var b, c, d;
                c = this.options, "parent" === c.containment && (c.containment = this.helper[0].parentNode), ("document" === c.containment || "window" === c.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, a("document" === c.containment ? document : window).width() - this.helperProportions.width - this.margins.left, (a("document" === c.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(c.containment) || (b = a(c.containment)[0], c = a(c.containment).offset(), d = "hidden" !== a(b).css("overflow"), this.containment = [c.left + (parseInt(a(b).css("borderLeftWidth"), 10) || 0) + (parseInt(a(b).css("paddingLeft"), 10) || 0) - this.margins.left, c.top + (parseInt(a(b).css("borderTopWidth"), 10) || 0) + (parseInt(a(b).css("paddingTop"), 10) || 0) - this.margins.top, c.left + (d ? Math.max(b.scrollWidth, b.offsetWidth) : b.offsetWidth) - (parseInt(a(b).css("borderLeftWidth"), 10) || 0) - (parseInt(a(b).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, c.top + (d ? Math.max(b.scrollHeight, b.offsetHeight) : b.offsetHeight) - (parseInt(a(b).css("borderTopWidth"), 10) || 0) - (parseInt(a(b).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
            },
            _convertPositionTo: function(b, c) {
                c || (c = this.position);
                var d = "absolute" === b ? 1 : -1,
                    e = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                    f = /(html|body)/i.test(e[0].tagName);
                return {
                    top: c.top + this.offset.relative.top * d + this.offset.parent.top * d - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : f ? 0 : e.scrollTop()) * d,
                    left: c.left + this.offset.relative.left * d + this.offset.parent.left * d - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : f ? 0 : e.scrollLeft()) * d
                }
            },
            _generatePosition: function(b) {
                var c, d, e = this.options;
                d = b.pageX, c = b.pageY;
                var f = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                    g = /(html|body)/i.test(f[0].tagName);
                return "relative" === this.cssPosition && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0]) && (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (b.pageX - this.offset.click.left < this.containment[0] && (d = this.containment[0] + this.offset.click.left), b.pageY - this.offset.click.top < this.containment[1] && (c = this.containment[1] + this.offset.click.top), b.pageX - this.offset.click.left > this.containment[2] && (d = this.containment[2] + this.offset.click.left), b.pageY - this.offset.click.top > this.containment[3] && (c = this.containment[3] + this.offset.click.top)), e.grid && (c = this.originalPageY + Math.round((c - this.originalPageY) / e.grid[1]) * e.grid[1], c = this.containment ? c - this.offset.click.top >= this.containment[1] && c - this.offset.click.top <= this.containment[3] ? c : c - this.offset.click.top >= this.containment[1] ? c - e.grid[1] : c + e.grid[1] : c, d = this.originalPageX + Math.round((d - this.originalPageX) / e.grid[0]) * e.grid[0], d = this.containment ? d - this.offset.click.left >= this.containment[0] && d - this.offset.click.left <= this.containment[2] ? d : d - this.offset.click.left >= this.containment[0] ? d - e.grid[0] : d + e.grid[0] : d)), {
                    top: c - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : g ? 0 : f.scrollTop()),
                    left: d - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : g ? 0 : f.scrollLeft())
                }
            },
            _rearrange: function(a, b, c, d) {
                c ? c[0].appendChild(this.placeholder[0]) : b.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? b.item[0] : b.item[0].nextSibling);
                var e = this.counter = this.counter ? ++this.counter : 1;
                this._delay(function() {
                    e === this.counter && this.refreshPositions(!d)
                })
            },
            _clear: function(a, b) {
                this.reverting = !1;
                var c, d = [];
                if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
                    for (c in this._storedCSS)("auto" === this._storedCSS[c] || "static" === this._storedCSS[c]) && (this._storedCSS[c] = "");
                    this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
                } else this.currentItem.show();
                for (this.fromOutside && !b && d.push(function(a) {
                        this._trigger("receive", a, this._uiHash(this.fromOutside))
                    }), (this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !b && d.push(function(a) {
                        this._trigger("update", a, this._uiHash())
                    }), this !== this.currentContainer && !b && (d.push(function(a) {
                        this._trigger("remove", a, this._uiHash())
                    }), d.push(function(a) {
                        return function(b) {
                            a._trigger("receive", b, this._uiHash(this))
                        }
                    }.call(this, this.currentContainer)), d.push(function(a) {
                        return function(b) {
                            a._trigger("update", b, this._uiHash(this))
                        }
                    }.call(this, this.currentContainer))), c = this.containers.length - 1; c >= 0; c--) b || d.push(function(a) {
                    return function(b) {
                        a._trigger("deactivate", b, this._uiHash(this))
                    }
                }.call(this, this.containers[c])), this.containers[c].containerCache.over && (d.push(function(a) {
                    return function(b) {
                        a._trigger("out", b, this._uiHash(this))
                    }
                }.call(this, this.containers[c])), this.containers[c].containerCache.over = 0);
                if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, this.cancelHelperRemoval) {
                    if (!b) {
                        for (this._trigger("beforeStop", a, this._uiHash()), c = 0; c < d.length; c++) d[c].call(this, a);
                        this._trigger("stop", a, this._uiHash())
                    }
                    return this.fromOutside = !1
                }
                if (b || this._trigger("beforeStop", a, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null, !b) {
                    for (c = 0; c < d.length; c++) d[c].call(this, a);
                    this._trigger("stop", a, this._uiHash())
                }
                return this.fromOutside = !1, !0
            },
            _trigger: function() {
                !1 === a.Widget.prototype._trigger.apply(this, arguments) && this.cancel()
            },
            _uiHash: function(b) {
                var c = b || this;
                return {
                    helper: c.helper,
                    placeholder: c.placeholder || a([]),
                    position: c.position,
                    originalPosition: c.originalPosition,
                    offset: c.positionAbs,
                    item: c.currentItem,
                    sender: b ? b.element : null
                }
            }
        })
    }(jQuery),
    function(a) {
        a.widget("ui.draggable", a.ui.mouse, {
            version: "1.10.2",
            widgetEventPrefix: "drag",
            options: {
                addClasses: !0,
                appendTo: "parent",
                axis: !1,
                connectToSortable: !1,
                containment: !1,
                cursor: "auto",
                cursorAt: !1,
                grid: !1,
                handle: !1,
                helper: "original",
                iframeFix: !1,
                opacity: !1,
                refreshPositions: !1,
                revert: !1,
                revertDuration: 500,
                scope: "default",
                scroll: !0,
                scrollSensitivity: 20,
                scrollSpeed: 20,
                snap: !1,
                snapMode: "both",
                snapTolerance: 20,
                stack: !1,
                zIndex: !1,
                drag: null,
                start: null,
                stop: null
            },
            _create: function() {
                "original" !== this.options.helper || /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative"), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._mouseInit()
            },
            _destroy: function() {
                this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._mouseDestroy()
            },
            _mouseCapture: function(b) {
                var c = this.options;
                return this.helper || c.disabled || a(b.target).closest(".ui-resizable-handle").length > 0 ? !1 : (this.handle = this._getHandle(b), this.handle ? (a(c.iframeFix === !0 ? "iframe" : c.iframeFix).each(function() {
                    a("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({
                        width: this.offsetWidth + "px",
                        height: this.offsetHeight + "px",
                        position: "absolute",
                        opacity: "0.001",
                        zIndex: 1e3
                    }).css(a(this).offset()).appendTo("body")
                }), !0) : !1)
            },
            _mouseStart: function(b) {
                var c = this.options;
                return this.helper = this._createHelper(b), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), a.ui.ddmanager && (a.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(), this.offset = this.positionAbs = this.element.offset(), this.offset = {
                    top: this.offset.top - this.margins.top,
                    left: this.offset.left - this.margins.left
                }, a.extend(this.offset, {
                    click: {
                        left: b.pageX - this.offset.left,
                        top: b.pageY - this.offset.top
                    },
                    parent: this._getParentOffset(),
                    relative: this._getRelativeOffset()
                }), this.originalPosition = this.position = this._generatePosition(b), this.originalPageX = b.pageX, this.originalPageY = b.pageY, c.cursorAt && this._adjustOffsetFromHelper(c.cursorAt), c.containment && this._setContainment(), this._trigger("start", b) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), a.ui.ddmanager && !c.dropBehaviour && a.ui.ddmanager.prepareOffsets(this, b), this._mouseDrag(b, !0), a.ui.ddmanager && a.ui.ddmanager.dragStart(this, b), !0)
            },
            _mouseDrag: function(b, c) {
                if (this.position = this._generatePosition(b), this.positionAbs = this._convertPositionTo("absolute"), !c) {
                    var d = this._uiHash();
                    if (this._trigger("drag", b, d) === !1) return this._mouseUp({}), !1;
                    this.position = d.position
                }
                return this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), a.ui.ddmanager && a.ui.ddmanager.drag(this, b), !1
            },
            _mouseStop: function(b) {
                var c, d = this,
                    e = !1,
                    f = !1;
                for (a.ui.ddmanager && !this.options.dropBehaviour && (f = a.ui.ddmanager.drop(this, b)), this.dropped && (f = this.dropped, this.dropped = !1), c = this.element[0]; c && (c = c.parentNode);) c === document && (e = !0);
                return e || "original" !== this.options.helper ? ("invalid" === this.options.revert && !f || "valid" === this.options.revert && f || this.options.revert === !0 || a.isFunction(this.options.revert) && this.options.revert.call(this.element, f) ? a(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
                    d._trigger("stop", b) !== !1 && d._clear()
                }) : this._trigger("stop", b) !== !1 && this._clear(), !1) : !1
            },
            _mouseUp: function(b) {
                return a("div.ui-draggable-iframeFix").each(function() {
                    this.parentNode.removeChild(this)
                }), a.ui.ddmanager && a.ui.ddmanager.dragStop(this, b), a.ui.mouse.prototype._mouseUp.call(this, b)
            },
            cancel: function() {
                return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
            },
            _getHandle: function(b) {
                return this.options.handle ? !!a(b.target).closest(this.element.find(this.options.handle)).length : !0
            },
            _createHelper: function(b) {
                var c = this.options,
                    d = a.isFunction(c.helper) ? a(c.helper.apply(this.element[0], [b])) : "clone" === c.helper ? this.element.clone().removeAttr("id") : this.element;
                return d.parents("body").length || d.appendTo("parent" === c.appendTo ? this.element[0].parentNode : c.appendTo), d[0] === this.element[0] || /(fixed|absolute)/.test(d.css("position")) || d.css("position", "absolute"), d
            },
            _adjustOffsetFromHelper: function(b) {
                "string" == typeof b && (b = b.split(" ")), a.isArray(b) && (b = {
                    left: +b[0],
                    top: +b[1] || 0
                }), "left" in b && (this.offset.click.left = b.left + this.margins.left), "right" in b && (this.offset.click.left = this.helperProportions.width - b.right + this.margins.left), "top" in b && (this.offset.click.top = b.top + this.margins.top), "bottom" in b && (this.offset.click.top = this.helperProportions.height - b.bottom + this.margins.top)
            },
            _getParentOffset: function() {
                this.offsetParent = this.helper.offsetParent();
                var b = this.offsetParent.offset();
                return "absolute" === this.cssPosition && this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) && (b.left += this.scrollParent.scrollLeft(), b.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === document.body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && a.ui.ie) && (b = {
                    top: 0,
                    left: 0
                }), {
                    top: b.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
                    left: b.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
                }
            },
            _getRelativeOffset: function() {
                if ("relative" === this.cssPosition) {
                    var a = this.element.position();
                    return {
                        top: a.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
                        left: a.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
                    }
                }
                return {
                    top: 0,
                    left: 0
                }
            },
            _cacheMargins: function() {
                this.margins = {
                    left: parseInt(this.element.css("marginLeft"), 10) || 0,
                    top: parseInt(this.element.css("marginTop"), 10) || 0,
                    right: parseInt(this.element.css("marginRight"), 10) || 0,
                    bottom: parseInt(this.element.css("marginBottom"), 10) || 0
                }
            },
            _cacheHelperProportions: function() {
                this.helperProportions = {
                    width: this.helper.outerWidth(),
                    height: this.helper.outerHeight()
                }
            },
            _setContainment: function() {
                var b, c, d, e = this.options;
                if ("parent" === e.containment && (e.containment = this.helper[0].parentNode), ("document" === e.containment || "window" === e.containment) && (this.containment = ["document" === e.containment ? 0 : a(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, "document" === e.containment ? 0 : a(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, ("document" === e.containment ? 0 : a(window).scrollLeft()) + a("document" === e.containment ? document : window).width() - this.helperProportions.width - this.margins.left, ("document" === e.containment ? 0 : a(window).scrollTop()) + (a("document" === e.containment ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(e.containment) || e.containment.constructor === Array) e.containment.constructor === Array && (this.containment = e.containment);
                else {
                    if (c = a(e.containment), d = c[0], !d) return;
                    b = "hidden" !== a(d).css("overflow"), this.containment = [(parseInt(a(d).css("borderLeftWidth"), 10) || 0) + (parseInt(a(d).css("paddingLeft"), 10) || 0), (parseInt(a(d).css("borderTopWidth"), 10) || 0) + (parseInt(a(d).css("paddingTop"), 10) || 0), (b ? Math.max(d.scrollWidth, d.offsetWidth) : d.offsetWidth) - (parseInt(a(d).css("borderRightWidth"), 10) || 0) - (parseInt(a(d).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (b ? Math.max(d.scrollHeight, d.offsetHeight) : d.offsetHeight) - (parseInt(a(d).css("borderBottomWidth"), 10) || 0) - (parseInt(a(d).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relative_container = c
                }
            },
            _convertPositionTo: function(b, c) {
                c || (c = this.position);
                var d = "absolute" === b ? 1 : -1,
                    e = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                    f = /(html|body)/i.test(e[0].tagName);
                return {
                    top: c.top + this.offset.relative.top * d + this.offset.parent.top * d - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : f ? 0 : e.scrollTop()) * d,
                    left: c.left + this.offset.relative.left * d + this.offset.parent.left * d - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : f ? 0 : e.scrollLeft()) * d
                }
            },
            _generatePosition: function(b) {
                var c, d, e, f, g = this.options,
                    h = "absolute" !== this.cssPosition || this.scrollParent[0] !== document && a.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent,
                    i = /(html|body)/i.test(h[0].tagName),
                    j = b.pageX,
                    k = b.pageY;
                return this.originalPosition && (this.containment && (this.relative_container ? (d = this.relative_container.offset(), c = [this.containment[0] + d.left, this.containment[1] + d.top, this.containment[2] + d.left, this.containment[3] + d.top]) : c = this.containment, b.pageX - this.offset.click.left < c[0] && (j = c[0] + this.offset.click.left), b.pageY - this.offset.click.top < c[1] && (k = c[1] + this.offset.click.top), b.pageX - this.offset.click.left > c[2] && (j = c[2] + this.offset.click.left), b.pageY - this.offset.click.top > c[3] && (k = c[3] + this.offset.click.top)), g.grid && (e = g.grid[1] ? this.originalPageY + Math.round((k - this.originalPageY) / g.grid[1]) * g.grid[1] : this.originalPageY, k = c ? e - this.offset.click.top >= c[1] || e - this.offset.click.top > c[3] ? e : e - this.offset.click.top >= c[1] ? e - g.grid[1] : e + g.grid[1] : e, f = g.grid[0] ? this.originalPageX + Math.round((j - this.originalPageX) / g.grid[0]) * g.grid[0] : this.originalPageX, j = c ? f - this.offset.click.left >= c[0] || f - this.offset.click.left > c[2] ? f : f - this.offset.click.left >= c[0] ? f - g.grid[0] : f + g.grid[0] : f)), {
                    top: k - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : i ? 0 : h.scrollTop()),
                    left: j - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : i ? 0 : h.scrollLeft())
                }
            },
            _clear: function() {
                this.helper.removeClass("ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1
            },
            _trigger: function(b, c, d) {
                return d = d || this._uiHash(), a.ui.plugin.call(this, b, [c, d]), "drag" === b && (this.positionAbs = this._convertPositionTo("absolute")), a.Widget.prototype._trigger.call(this, b, c, d)
            },
            plugins: {},
            _uiHash: function() {
                return {
                    helper: this.helper,
                    position: this.position,
                    originalPosition: this.originalPosition,
                    offset: this.positionAbs
                }
            }
        }), a.ui.plugin.add("draggable", "connectToSortable", {
            start: function(b, c) {
                var d = a(this).data("ui-draggable"),
                    e = d.options,
                    f = a.extend({}, c, {
                        item: d.element
                    });
                d.sortables = [], a(e.connectToSortable).each(function() {
                    var c = a.data(this, "ui-sortable");
                    c && !c.options.disabled && (d.sortables.push({
                        instance: c,
                        shouldRevert: c.options.revert
                    }), c.refreshPositions(), c._trigger("activate", b, f))
                })
            },
            stop: function(b, c) {
                var d = a(this).data("ui-draggable"),
                    e = a.extend({}, c, {
                        item: d.element
                    });
                a.each(d.sortables, function() {
                    this.instance.isOver ? (this.instance.isOver = 0, d.cancelHelperRemoval = !0, this.instance.cancelHelperRemoval = !1, this.shouldRevert && (this.instance.options.revert = this.shouldRevert), this.instance._mouseStop(b), this.instance.options.helper = this.instance.options._helper, "original" === d.options.helper && this.instance.currentItem.css({
                        top: "auto",
                        left: "auto"
                    })) : (this.instance.cancelHelperRemoval = !1, this.instance._trigger("deactivate", b, e))
                })
            },
            drag: function(b, c) {
                var d = a(this).data("ui-draggable"),
                    e = this;
                a.each(d.sortables, function() {
                    var f = !1,
                        g = this;
                    this.instance.positionAbs = d.positionAbs, this.instance.helperProportions = d.helperProportions, this.instance.offset.click = d.offset.click, this.instance._intersectsWith(this.instance.containerCache) && (f = !0, a.each(d.sortables, function() {
                        return this.instance.positionAbs = d.positionAbs, this.instance.helperProportions = d.helperProportions, this.instance.offset.click = d.offset.click, this !== g && this.instance._intersectsWith(this.instance.containerCache) && a.contains(g.instance.element[0], this.instance.element[0]) && (f = !1), f
                    })), f ? (this.instance.isOver || (this.instance.isOver = 1, this.instance.currentItem = a(e).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item", !0), this.instance.options._helper = this.instance.options.helper, this.instance.options.helper = function() {
                        return c.helper[0]
                    }, b.target = this.instance.currentItem[0], this.instance._mouseCapture(b, !0), this.instance._mouseStart(b, !0, !0), this.instance.offset.click.top = d.offset.click.top, this.instance.offset.click.left = d.offset.click.left, this.instance.offset.parent.left -= d.offset.parent.left - this.instance.offset.parent.left, this.instance.offset.parent.top -= d.offset.parent.top - this.instance.offset.parent.top, d._trigger("toSortable", b), d.dropped = this.instance.element, d.currentItem = d.element, this.instance.fromOutside = d), this.instance.currentItem && this.instance._mouseDrag(b)) : this.instance.isOver && (this.instance.isOver = 0, this.instance.cancelHelperRemoval = !0, this.instance.options.revert = !1, this.instance._trigger("out", b, this.instance._uiHash(this.instance)), this.instance._mouseStop(b, !0), this.instance.options.helper = this.instance.options._helper, this.instance.currentItem.remove(), this.instance.placeholder && this.instance.placeholder.remove(), d._trigger("fromSortable", b), d.dropped = !1)
                })
            }
        }), a.ui.plugin.add("draggable", "cursor", {
            start: function() {
                var b = a("body"),
                    c = a(this).data("ui-draggable").options;
                b.css("cursor") && (c._cursor = b.css("cursor")), b.css("cursor", c.cursor)
            },
            stop: function() {
                var b = a(this).data("ui-draggable").options;
                b._cursor && a("body").css("cursor", b._cursor)
            }
        }), a.ui.plugin.add("draggable", "opacity", {
            start: function(b, c) {
                var d = a(c.helper),
                    e = a(this).data("ui-draggable").options;
                d.css("opacity") && (e._opacity = d.css("opacity")), d.css("opacity", e.opacity)
            },
            stop: function(b, c) {
                var d = a(this).data("ui-draggable").options;
                d._opacity && a(c.helper).css("opacity", d._opacity)
            }
        }), a.ui.plugin.add("draggable", "scroll", {
            start: function() {
                var b = a(this).data("ui-draggable");
                b.scrollParent[0] !== document && "HTML" !== b.scrollParent[0].tagName && (b.overflowOffset = b.scrollParent.offset())
            },
            drag: function(b) {
                var c = a(this).data("ui-draggable"),
                    d = c.options,
                    e = !1;
                c.scrollParent[0] !== document && "HTML" !== c.scrollParent[0].tagName ? (d.axis && "x" === d.axis || (c.overflowOffset.top + c.scrollParent[0].offsetHeight - b.pageY < d.scrollSensitivity ? c.scrollParent[0].scrollTop = e = c.scrollParent[0].scrollTop + d.scrollSpeed : b.pageY - c.overflowOffset.top < d.scrollSensitivity && (c.scrollParent[0].scrollTop = e = c.scrollParent[0].scrollTop - d.scrollSpeed)), d.axis && "y" === d.axis || (c.overflowOffset.left + c.scrollParent[0].offsetWidth - b.pageX < d.scrollSensitivity ? c.scrollParent[0].scrollLeft = e = c.scrollParent[0].scrollLeft + d.scrollSpeed : b.pageX - c.overflowOffset.left < d.scrollSensitivity && (c.scrollParent[0].scrollLeft = e = c.scrollParent[0].scrollLeft - d.scrollSpeed))) : (d.axis && "x" === d.axis || (b.pageY - a(document).scrollTop() < d.scrollSensitivity ? e = a(document).scrollTop(a(document).scrollTop() - d.scrollSpeed) : a(window).height() - (b.pageY - a(document).scrollTop()) < d.scrollSensitivity && (e = a(document).scrollTop(a(document).scrollTop() + d.scrollSpeed))), d.axis && "y" === d.axis || (b.pageX - a(document).scrollLeft() < d.scrollSensitivity ? e = a(document).scrollLeft(a(document).scrollLeft() - d.scrollSpeed) : a(window).width() - (b.pageX - a(document).scrollLeft()) < d.scrollSensitivity && (e = a(document).scrollLeft(a(document).scrollLeft() + d.scrollSpeed)))), e !== !1 && a.ui.ddmanager && !d.dropBehaviour && a.ui.ddmanager.prepareOffsets(c, b)
            }
        }), a.ui.plugin.add("draggable", "snap", {
            start: function() {
                var b = a(this).data("ui-draggable"),
                    c = b.options;
                b.snapElements = [], a(c.snap.constructor !== String ? c.snap.items || ":data(ui-draggable)" : c.snap).each(function() {
                    var c = a(this),
                        d = c.offset();
                    this !== b.element[0] && b.snapElements.push({
                        item: this,
                        width: c.outerWidth(),
                        height: c.outerHeight(),
                        top: d.top,
                        left: d.left
                    })
                })
            },
            drag: function(b, c) {
                var d, e, f, g, h, i, j, k, l, m, n = a(this).data("ui-draggable"),
                    o = n.options,
                    p = o.snapTolerance,
                    q = c.offset.left,
                    r = q + n.helperProportions.width,
                    s = c.offset.top,
                    t = s + n.helperProportions.height;
                for (l = n.snapElements.length - 1; l >= 0; l--) h = n.snapElements[l].left, i = h + n.snapElements[l].width, j = n.snapElements[l].top, k = j + n.snapElements[l].height, q > h - p && i + p > q && s > j - p && k + p > s || q > h - p && i + p > q && t > j - p && k + p > t || r > h - p && i + p > r && s > j - p && k + p > s || r > h - p && i + p > r && t > j - p && k + p > t ? ("inner" !== o.snapMode && (d = Math.abs(j - t) <= p, e = Math.abs(k - s) <= p, f = Math.abs(h - r) <= p, g = Math.abs(i - q) <= p, d && (c.position.top = n._convertPositionTo("relative", {
                    top: j - n.helperProportions.height,
                    left: 0
                }).top - n.margins.top), e && (c.position.top = n._convertPositionTo("relative", {
                    top: k,
                    left: 0
                }).top - n.margins.top), f && (c.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: h - n.helperProportions.width
                }).left - n.margins.left), g && (c.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: i
                }).left - n.margins.left)), m = d || e || f || g, "outer" !== o.snapMode && (d = Math.abs(j - s) <= p, e = Math.abs(k - t) <= p, f = Math.abs(h - q) <= p, g = Math.abs(i - r) <= p, d && (c.position.top = n._convertPositionTo("relative", {
                    top: j,
                    left: 0
                }).top - n.margins.top), e && (c.position.top = n._convertPositionTo("relative", {
                    top: k - n.helperProportions.height,
                    left: 0
                }).top - n.margins.top), f && (c.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: h
                }).left - n.margins.left), g && (c.position.left = n._convertPositionTo("relative", {
                    top: 0,
                    left: i - n.helperProportions.width
                }).left - n.margins.left)), !n.snapElements[l].snapping && (d || e || f || g || m) && n.options.snap.snap && n.options.snap.snap.call(n.element, b, a.extend(n._uiHash(), {
                    snapItem: n.snapElements[l].item
                })), n.snapElements[l].snapping = d || e || f || g || m) : (n.snapElements[l].snapping && n.options.snap.release && n.options.snap.release.call(n.element, b, a.extend(n._uiHash(), {
                    snapItem: n.snapElements[l].item
                })), n.snapElements[l].snapping = !1)
            }
        }), a.ui.plugin.add("draggable", "stack", {
            start: function() {
                var b, c = this.data("ui-draggable").options,
                    d = a.makeArray(a(c.stack)).sort(function(b, c) {
                        return (parseInt(a(b).css("zIndex"), 10) || 0) - (parseInt(a(c).css("zIndex"), 10) || 0)
                    });
                d.length && (b = parseInt(a(d[0]).css("zIndex"), 10) || 0, a(d).each(function(c) {
                    a(this).css("zIndex", b + c)
                }), this.css("zIndex", b + d.length))
            }
        }), a.ui.plugin.add("draggable", "zIndex", {
            start: function(b, c) {
                var d = a(c.helper),
                    e = a(this).data("ui-draggable").options;
                d.css("zIndex") && (e._zIndex = d.css("zIndex")), d.css("zIndex", e.zIndex)
            },
            stop: function(b, c) {
                var d = a(this).data("ui-draggable").options;
                d._zIndex && a(c.helper).css("zIndex", d._zIndex)
            }
        })
    }(jQuery),
    function(a, b, c) {
        var d = "ontouchstart" in b,
            e = d ? "touchstart" : "mousedown",
            f = d ? "touchmove" : "mousemove",
            g = d ? "touchcancel" : "mouseup",
            h = function(a) {
                var b = Math.floor(a / 3600),
                    c = Math.floor(a % 3600 / 60),
                    d = Math.ceil(a % 3600 % 60);
                return (0 == b ? "" : b > 0 && b.toString().length < 2 ? "0" + b + ":" : b + ":") + (c.toString().length < 2 ? "0" + c : c) + ":" + (d.toString().length < 2 ? "0" + d : d)
            },
            i = function(a) {
                var b = c.createElement("audio");
                return !(!b.canPlayType || !b.canPlayType("audio/" + a.split(".").pop().toLowerCase() + ";").replace(/no/, ""))
            };
        a.fn.audioPlayer = function(b) {
            var b = a.extend({
                    classPrefix: "audioplayer",
                    strPlay: "Play",
                    strPause: "Pause",
                    strVolume: "Volume"
                }, b),
                c = {},
                j = {
                    playPause: "playpause",
                    playing: "playing",
                    time: "time",
                    timeCurrent: "time-current",
                    timeDuration: "time-duration",
                    bar: "bar",
                    barLoaded: "bar-loaded",
                    barPlayed: "bar-played",
                    volume: "volume",
                    volumeButton: "volume-button",
                    volumeAdjust: "volume-adjust",
                    noVolume: "novolume",
                    mute: "mute",
                    mini: "mini"
                };
            for (var k in j) c[k] = b.classPrefix + "-" + j[k];
            return this.each(function() {
                if ("audio" != a(this).prop("tagName").toLowerCase()) return !1;
                var j = a(this),
                    k = j.attr("src"),
                    l = j.get(0).getAttribute("autoplay"),
                    l = "" === l || "autoplay" === l ? !0 : !1,
                    m = j.get(0).getAttribute("loop"),
                    m = "" === m || "loop" === m ? !0 : !1,
                    n = !1;
                "undefined" == typeof k ? j.find("source").each(function() {
                    return k = a(this).attr("src"), "undefined" != typeof k && i(k) ? (n = !0, !1) : void 0
                }) : i(k) && (n = !0);
                var o = a('<div class="' + b.classPrefix + '">' + (n ? a("<div>").append(j.eq(0).clone()).html() : '<embed src="' + k + '" width="0" height="0" volume="100" autostart="' + l.toString() + '" loop="' + m.toString() + '" />') + '<div class="' + c.playPause + '" title="' + b.strPlay + '"><a href="#">' + b.strPlay + "</a></div></div>"),
                    p = n ? o.find("audio") : o.find("embed"),
                    p = p.get(0);
                if (n) {
                    o.find("audio").css({
                        width: 0,
                        height: 0,
                        visibility: "hidden"
                    }), o.append('<div class="' + c.time + " " + c.timeCurrent + '"></div><div class="' + c.bar + '"><div class="' + c.barLoaded + '"></div><div class="' + c.barPlayed + '"></div></div><div class="' + c.time + " " + c.timeDuration + '"></div><div class="' + c.volume + '"><div class="' + c.volumeButton + '" title="' + b.strVolume + '"><a href="#">' + b.strVolume + '</a></div><div class="' + c.volumeAdjust + '"><div><div></div></div></div></div>');
                    var q = o.find("." + c.bar),
                        r = o.find("." + c.barPlayed),
                        s = o.find("." + c.barLoaded),
                        t = o.find("." + c.timeCurrent),
                        u = o.find("." + c.timeDuration),
                        v = o.find("." + c.volumeButton),
                        w = o.find("." + c.volumeAdjust + " > div"),
                        x = 0,
                        y = function(a) {
                            theRealEvent = d ? a.originalEvent.touches[0] : a, p.currentTime = Math.round(p.duration * (theRealEvent.pageX - q.offset().left) / q.width())
                        },
                        z = function(a) {
                            theRealEvent = d ? a.originalEvent.touches[0] : a, p.volume = Math.abs((theRealEvent.pageY - (w.offset().top + w.height())) / w.height())
                        },
                        A = setInterval(function() {
                            p && p.buffered && p.duration ? (p.loaded || (p.loaded = !0, console.log("loaded")), s.width(100 * (p.buffered.end(0) / p.duration) + "%"), p.buffered.end(0) >= p.duration && clearInterval(A)) : console.log("loading audio...")
                        }, 100),
                        B = p.volume,
                        C = p.volume = .111;
                    Math.round(1e3 * p.volume) / 1e3 == C ? p.volume = B : o.addClass(c.noVolume), u.html("&hellip;"), t.text(h(0)), p.addEventListener("loadeddata", function() {
                        u.text(h(p.duration)), w.find("div").height(100 * p.volume + "%"), x = p.volume
                    }), p.addEventListener("timeupdate", function() {
                        t.text(h(p.currentTime)), r.width(100 * (p.currentTime / p.duration) + "%")
                    }), p.addEventListener("volumechange", function() {
                        w.find("div").height(100 * p.volume + "%"), p.volume > 0 && o.hasClass(c.mute) && o.removeClass(c.mute), p.volume <= 0 && !o.hasClass(c.mute) && o.addClass(c.mute)
                    }), p.addEventListener("ended", function() {
                        o.removeClass(c.playing)
                    }), q.on(e, function(a) {
                        y(a), q.on(f, function(a) {
                            y(a)
                        })
                    }).on(g, function() {
                        q.unbind(f)
                    }), v.on("click", function() {
                        return o.hasClass(c.mute) ? (o.removeClass(c.mute), p.volume = x) : (o.addClass(c.mute), x = p.volume, p.volume = 0), !1
                    }), w.on(e, function(a) {
                        z(a), w.on(f, function(a) {
                            z(a)
                        })
                    }).on(g, function() {
                        w.unbind(f)
                    })
                } else o.addClass(c.mini);
                l && o.addClass(c.playing), o.find("." + c.playPause).on("click", function() {
                    return o.hasClass(c.playing) ? (a(this).attr("title", b.strPlay).find("a").html(b.strPlay), o.removeClass(c.playing), n ? p.pause() : p.Stop()) : (a(this).attr("title", b.strPause).find("a").html(b.strPause), o.addClass(c.playing), n ? p.play() : p.Play()), !1
                }), j.replaceWith(o)
            }), this
        }
    }(jQuery, window, document),
    function(a, b) {
        function c(a, b, c) {
            return a.addEventListener ? (a.addEventListener(b, c, !1), void 0) : (a.attachEvent("on" + b, c), void 0)
        }

        function d(a) {
            if ("keypress" == a.type) {
                var b = String.fromCharCode(a.which);
                return a.shiftKey || (b = b.toLowerCase()), b
            }
            return y[a.which] ? y[a.which] : z[a.which] ? z[a.which] : String.fromCharCode(a.which).toLowerCase()
        }

        function e(a, b) {
            return a.sort().join(",") === b.sort().join(",")
        }

        function f(a) {
            a = a || {};
            var b, c = !1;
            for (b in E) a[b] ? c = !0 : E[b] = 0;
            c || (H = !1)
        }

        function g(a, b, c, d, f, g) {
            var h, i, j = [],
                k = c.type;
            if (!C[a]) return [];
            for ("keyup" == k && n(a) && (b = [a]), h = 0; h < C[a].length; ++h)
                if (i = C[a][h], (d || !i.seq || E[i.seq] == i.level) && k == i.action && ("keypress" == k && !c.metaKey && !c.ctrlKey || e(b, i.modifiers))) {
                    var l = !d && i.combo == f,
                        m = d && i.seq == d && i.level == g;
                    (l || m) && C[a].splice(h, 1), j.push(i)
                }
            return j
        }

        function h(a) {
            var b = [];
            return a.shiftKey && b.push("shift"), a.altKey && b.push("alt"), a.ctrlKey && b.push("ctrl"), a.metaKey && b.push("meta"), b
        }

        function i(a) {
            return a.preventDefault ? (a.preventDefault(), void 0) : (a.returnValue = !1, void 0)
        }

        function j(a) {
            return a.stopPropagation ? (a.stopPropagation(), void 0) : (a.cancelBubble = !0, void 0)
        }

        function k(a, b, c, d) {
            J.stopCallback(b, b.target || b.srcElement, c, d) || a(b, c) === !1 && (i(b), j(b))
        }

        function l(a, b, c) {
            var d, e = g(a, b, c),
                h = {},
                i = 0,
                j = !1;
            for (d = 0; d < e.length; ++d) e[d].seq && (i = Math.max(i, e[d].level));
            for (d = 0; d < e.length; ++d)
                if (e[d].seq) {
                    if (e[d].level != i) continue;
                    j = !0, h[e[d].seq] = 1, k(e[d].callback, c, e[d].combo, e[d].seq)
                } else j || k(e[d].callback, c, e[d].combo);
            var l = "keypress" == c.type && G;
            c.type != H || n(a) || l || f(h), G = j && "keydown" == c.type
        }

        function m(a) {
            "number" != typeof a.which && (a.which = a.keyCode);
            var b = d(a);
            if (b) return "keyup" == a.type && F === b ? (F = !1, void 0) : (J.handleKey(b, h(a), a), void 0)
        }

        function n(a) {
            return "shift" == a || "ctrl" == a || "alt" == a || "meta" == a
        }

        function o() {
            clearTimeout(x), x = setTimeout(f, 1e3)
        }

        function p() {
            if (!w) {
                w = {};
                for (var a in y) a > 95 && 112 > a || y.hasOwnProperty(a) && (w[y[a]] = a)
            }
            return w
        }

        function q(a, b, c) {
            return c || (c = p()[a] ? "keydown" : "keypress"), "keypress" == c && b.length && (c = "keydown"), c
        }

        function r(a, b, c, e) {
            function g(b) {
                return function() {
                    H = b, ++E[a], o()
                }
            }

            function h(b) {
                k(c, b, a), "keyup" !== e && (F = d(b)), setTimeout(f, 10)
            }
            E[a] = 0;
            for (var i = 0; i < b.length; ++i) {
                var j = i + 1 === b.length,
                    l = j ? h : g(e || t(b[i + 1]).action);
                u(b[i], l, e, a, i)
            }
        }

        function s(a) {
            return "+" === a ? ["+"] : a.split("+")
        }

        function t(a, b) {
            var c, d, e, f = [];
            for (c = s(a), e = 0; e < c.length; ++e) d = c[e], B[d] && (d = B[d]), b && "keypress" != b && A[d] && (d = A[d], f.push("shift")), n(d) && f.push(d);
            return b = q(d, f, b), {
                key: d,
                modifiers: f,
                action: b
            }
        }

        function u(a, b, c, d, e) {
            D[a + ":" + c] = b, a = a.replace(/\s+/g, " ");
            var f, h = a.split(" ");
            return h.length > 1 ? (r(a, h, b, c), void 0) : (f = t(a, c), C[f.key] = C[f.key] || [], g(f.key, f.modifiers, {
                type: f.action
            }, d, a, e), C[f.key][d ? "unshift" : "push"]({
                callback: b,
                modifiers: f.modifiers,
                action: f.action,
                seq: d,
                level: e,
                combo: a
            }), void 0)
        }

        function v(a, b, c) {
            for (var d = 0; d < a.length; ++d) u(a[d], b, c)
        }
        for (var w, x, y = {
                8: "backspace",
                9: "tab",
                13: "enter",
                16: "shift",
                17: "ctrl",
                18: "alt",
                20: "capslock",
                27: "esc",
                32: "space",
                33: "pageup",
                34: "pagedown",
                35: "end",
                36: "home",
                37: "left",
                38: "up",
                39: "right",
                40: "down",
                45: "ins",
                46: "del",
                91: "meta",
                93: "meta",
                224: "meta"
            }, z = {
                106: "*",
                107: "+",
                109: "-",
                110: ".",
                111: "/",
                186: ";",
                187: "=",
                188: ",",
                189: "-",
                190: ".",
                191: "/",
                192: "`",
                219: "[",
                220: "\\",
                221: "]",
                222: "'"
            }, A = {
                "~": "`",
                "!": "1",
                "@": "2",
                "#": "3",
                $: "4",
                "%": "5",
                "^": "6",
                "&": "7",
                "*": "8",
                "(": "9",
                ")": "0",
                _: "-",
                "+": "=",
                ":": ";",
                '"': "'",
                "<": ",",
                ">": ".",
                "?": "/",
                "|": "\\"
            }, B = {
                option: "alt",
                command: "meta",
                "return": "enter",
                escape: "esc",
                mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? "meta" : "ctrl"
            }, C = {}, D = {}, E = {}, F = !1, G = !1, H = !1, I = 1; 20 > I; ++I) y[111 + I] = "f" + I;
        for (I = 0; 9 >= I; ++I) y[I + 96] = I;
        c(b, "keypress", m), c(b, "keydown", m), c(b, "keyup", m);
        var J = {
            bind: function(a, b, c) {
                return a = a instanceof Array ? a : [a], v(a, b, c), this
            },
            unbind: function(a, b) {
                return J.bind(a, function() {}, b)
            },
            trigger: function(a, b) {
                return D[a + ":" + b] && D[a + ":" + b]({}, a), this
            },
            reset: function() {
                return C = {}, D = {}, this
            },
            stopCallback: function(a, b) {
                return (" " + b.className + " ").indexOf(" mousetrap ") > -1 ? !1 : "INPUT" == b.tagName || "SELECT" == b.tagName || "TEXTAREA" == b.tagName || b.isContentEditable
            },
            handleKey: l
        };
        a.Mousetrap = J, "function" == typeof define && define.amd && define(J)
    }(window, document), Mousetrap = function(a) {
        var b = {},
            c = a.stopCallback;
        return a.stopCallback = function(a, d, e, f) {
            return b[e] || b[f] ? !1 : c(a, d, e)
        }, a.bindGlobal = function(c, d, e) {
            if (a.bind(c, d, e), c instanceof Array)
                for (var f = 0; f < c.length; f++) b[c[f]] = !0;
            else b[c] = !0
        }, a
    }(Mousetrap), Mousetrap = function(a) {
        var b, c = a,
            d = c.bind;
        return c.bind = function() {
            if (b = arguments, "string" == typeof b[0] || b[0] instanceof Array) return d(b[0], b[1], b[2]);
            for (var a in b[0]) b[0].hasOwnProperty(a) && d(a, b[0][a], b[1])
        }, c
    }(Mousetrap), Mousetrap = function(a) {
        var b = a,
            c = b.stopCallback,
            d = !0;
        return b.stopCallback = function(a, b, e) {
            return d ? c(a, b, e) : !0
        }, b.pause = function() {
            d = !1
        }, b.unpause = function() {
            d = !0
        }, b
    }(Mousetrap),
    function() {
        function a(b, c) {
            function d() {
                if ("session" == b) try {
                    i = l.parse(window.name || "{}")
                } catch (a) {
                    i = {}
                }
            }
            var e, f, g = !1,
                h = 0,
                i = {};
            if (Math.random(), c || "undefined" == typeof window[b + "Storage"])
                if ("local" == b && window.globalStorage) localStorage = window.globalStorage[window.location.hostname];
                else if ("userDataBehavior" == r) {
                c && window[b + "Storage"] && window[b + "Storage"].parentNode && window[b + "Storage"].parentNode.removeChild(window[b + "Storage"]), f = document.createElement("button"), document.getElementsByTagName("head")[0].appendChild(f), "local" == b ? i = n : "session" == b && d();
                for (e in i) i.hasOwnProperty(e) && "__jstorage_meta" != e && "length" != e && "undefined" != typeof i[e] && (e in f || h++, f[e] = i[e]);
                f.length = h, f.key = function(a) {
                    var b, c = 0;
                    d();
                    for (b in i)
                        if (i.hasOwnProperty(b) && "__jstorage_meta" != b && "length" != b && "undefined" != typeof i[b]) {
                            if (c == a) return b;
                            c++
                        }
                }, f.getItem = function(a) {
                    return d(), "session" == b ? i[a] : k.jStorage.get(a)
                }, f.setItem = function(a, b) {
                    "undefined" != typeof b && (f[a] = (b || "").toString())
                }, f.removeItem = function(a) {
                    return "local" == b ? k.jStorage.deleteKey(a) : (f[a] = void 0, g = !0, a in f && f.removeAttribute(a), g = !1, void 0)
                }, f.clear = function() {
                    "session" == b ? (window.name = "", a("session", !0)) : k.jStorage.flush()
                }, "local" == b && (y = function(a, b) {
                    "length" != a && (g = !0, "undefined" == typeof b ? a in f && (h--, f.removeAttribute(a)) : (a in f || h++, f[a] = (b || "").toString()), f.length = h, g = !1)
                }), f.attachEvent("onpropertychange", function(a) {
                    if ("length" != a.propertyName && !g && "length" != a.propertyName) {
                        if ("local" == b) !(a.propertyName in i) && "undefined" != typeof f[a.propertyName] && h++;
                        else if ("session" == b) return d(), "undefined" == typeof f[a.propertyName] || a.propertyName in i ? "undefined" == typeof f[a.propertyName] && a.propertyName in i ? (delete i[a.propertyName], h--) : i[a.propertyName] = f[a.propertyName] : (i[a.propertyName] = f[a.propertyName], h++), "session" == b && (window.name = l.stringify(i)), f.length = h, void 0;
                        k.jStorage.set(a.propertyName, f[a.propertyName]), f.length = h
                    }
                }), window[b + "Storage"] = f
            }
        }

        function b() {
            var a = "{}";
            if ("userDataBehavior" == r) {
                p.load("jStorage");
                try {
                    a = p.getAttribute("jStorage")
                } catch (b) {}
                try {
                    u = p.getAttribute("jStorage_update")
                } catch (c) {}
                o.jStorage = a
            }
            f(), i(), j()
        }

        function c() {
            var a;
            clearTimeout(t), t = setTimeout(function() {
                if ("localStorage" == r || "globalStorage" == r) a = o.jStorage_update;
                else if ("userDataBehavior" == r) {
                    p.load("jStorage");
                    try {
                        a = p.getAttribute("jStorage_update")
                    } catch (c) {}
                }
                if (a && a != u) {
                    u = a;
                    var e, f = l.parse(l.stringify(n.__jstorage_meta.CRC32));
                    b(), e = l.parse(l.stringify(n.__jstorage_meta.CRC32));
                    var g, h = [],
                        i = [];
                    for (g in f) f.hasOwnProperty(g) && (e[g] ? f[g] != e[g] && "2." == String(f[g]).substr(0, 2) && h.push(g) : i.push(g));
                    for (g in e) e.hasOwnProperty(g) && (f[g] || h.push(g));
                    d(h, "updated"), d(i, "deleted")
                }
            }, 25)
        }

        function d(a, b) {
            if (a = [].concat(a || []), "flushed" == b) {
                a = [];
                for (var c in s) s.hasOwnProperty(c) && a.push(c);
                b = "deleted"
            }
            c = 0;
            for (var d = a.length; d > c; c++)
                if (s[a[c]])
                    for (var e = 0, f = s[a[c]].length; f > e; e++) s[a[c]][e](a[c], b)
        }

        function e() {
            var a = (+new Date).toString();
            "localStorage" == r || "globalStorage" == r ? o.jStorage_update = a : "userDataBehavior" == r && (p.setAttribute("jStorage_update", a), p.save("jStorage")), c()
        }

        function f() {
            if (o.jStorage) try {
                n = l.parse(String(o.jStorage))
            } catch (a) {
                o.jStorage = "{}"
            } else o.jStorage = "{}";
            q = o.jStorage ? String(o.jStorage).length : 0, n.__jstorage_meta || (n.__jstorage_meta = {}), n.__jstorage_meta.CRC32 || (n.__jstorage_meta.CRC32 = {})
        }

        function g() {
            if (n.__jstorage_meta.PubSub) {
                for (var a = +new Date - 2e3, b = 0, c = n.__jstorage_meta.PubSub.length; c > b; b++)
                    if (n.__jstorage_meta.PubSub[b][0] <= a) {
                        n.__jstorage_meta.PubSub.splice(b, n.__jstorage_meta.PubSub.length - b);
                        break
                    }
                n.__jstorage_meta.PubSub.length || delete n.__jstorage_meta.PubSub
            }
            try {
                o.jStorage = l.stringify(n), p && (p.setAttribute("jStorage", o.jStorage), p.save("jStorage")), q = o.jStorage ? String(o.jStorage).length : 0
            } catch (d) {}
        }

        function h(a) {
            if (!a || "string" != typeof a && "number" != typeof a) throw new TypeError("Key name must be string or numeric");
            if ("__jstorage_meta" == a) throw new TypeError("Reserved key name");
            return !0
        }

        function i() {
            var a, b, c, f, h = 1 / 0,
                j = !1,
                k = [];
            if (clearTimeout(m), n.__jstorage_meta && "object" == typeof n.__jstorage_meta.TTL) {
                a = +new Date, c = n.__jstorage_meta.TTL, f = n.__jstorage_meta.CRC32;
                for (b in c) c.hasOwnProperty(b) && (c[b] <= a ? (delete c[b], delete f[b], delete n[b], j = !0, k.push(b)) : c[b] < h && (h = c[b]));
                1 / 0 != h && (m = setTimeout(i, h - a)), j && (g(), e(), d(k, "deleted"))
            }
        }

        function j() {
            if (n.__jstorage_meta.PubSub) {
                for (var a, b = w, c = len = n.__jstorage_meta.PubSub.length - 1; c >= 0; c--)
                    if (a = n.__jstorage_meta.PubSub[c], a[0] > w) {
                        var b = a[0],
                            d = a[1];
                        if (a = a[2], v[d])
                            for (var e = 0, f = v[d].length; f > e; e++) v[d][e](d, l.parse(l.stringify(a)))
                    }
                w = b
            }
        }
        var k = window.jQuery || window.$ || (window.$ = {}),
            l = {
                parse: window.JSON && (window.JSON.parse || window.JSON.decode) || String.prototype.evalJSON && function(a) {
                    return String(a).evalJSON()
                } || k.parseJSON || k.evalJSON,
                stringify: Object.toJSON || window.JSON && (window.JSON.stringify || window.JSON.encode) || k.toJSON
            };
        if (!l.parse || !l.stringify) throw Error("No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page");
        var m, n = {
                __jstorage_meta: {
                    CRC32: {}
                }
            },
            o = {
                jStorage: "{}"
            },
            p = null,
            q = 0,
            r = !1,
            s = {},
            t = !1,
            u = 0,
            v = {},
            w = +new Date,
            x = {
                isXML: function(a) {
                    return (a = (a ? a.ownerDocument || a : 0).documentElement) ? "HTML" !== a.nodeName : !1
                },
                encode: function(a) {
                    if (!this.isXML(a)) return !1;
                    try {
                        return (new XMLSerializer).serializeToString(a)
                    } catch (b) {
                        try {
                            return a.xml
                        } catch (c) {}
                    }
                    return !1
                },
                decode: function(a) {
                    var b = "DOMParser" in window && (new DOMParser).parseFromString || window.ActiveXObject && function(a) {
                        var b = new ActiveXObject("Microsoft.XMLDOM");
                        return b.async = "false", b.loadXML(a), b
                    };
                    return b ? (a = b.call("DOMParser" in window && new DOMParser || window, a, "text/xml"), this.isXML(a) ? a : !1) : !1
                }
            },
            y = function() {};
        k.jStorage = {
            version: "0.3.1",
            set: function(a, b, c) {
                if (h(a), c = c || {}, "undefined" == typeof b) return this.deleteKey(a), b;
                if (x.isXML(b)) b = {
                    _is_xml: !0,
                    xml: x.encode(b)
                };
                else {
                    if ("function" == typeof b) return;
                    b && "object" == typeof b && (b = l.parse(l.stringify(b)))
                }
                n[a] = b;
                for (var e, f = n.__jstorage_meta.CRC32, g = l.stringify(b), i = g.length, j = 0 / 0 ^ i, k = 0; i >= 4;) e = 255 & g.charCodeAt(k) | (255 & g.charCodeAt(++k)) << 8 | (255 & g.charCodeAt(++k)) << 16 | (255 & g.charCodeAt(++k)) << 24, e = 1540483477 * (65535 & e) + ((65535 & 1540483477 * (e >>> 16)) << 16), e ^= e >>> 24, e = 1540483477 * (65535 & e) + ((65535 & 1540483477 * (e >>> 16)) << 16), j = 1540483477 * (65535 & j) + ((65535 & 1540483477 * (j >>> 16)) << 16) ^ e, i -= 4, ++k;
                switch (i) {
                    case 3:
                        j ^= (255 & g.charCodeAt(k + 2)) << 16;
                    case 2:
                        j ^= (255 & g.charCodeAt(k + 1)) << 8;
                    case 1:
                        j ^= 255 & g.charCodeAt(k), j = 1540483477 * (65535 & j) + ((65535 & 1540483477 * (j >>> 16)) << 16)
                }
                return j ^= j >>> 13, j = 1540483477 * (65535 & j) + ((65535 & 1540483477 * (j >>> 16)) << 16), f[a] = "2." + ((j ^ j >>> 15) >>> 0), this.setTTL(a, c.TTL || 0), y(a, b), d(a, "updated"), b
            },
            get: function(a, b) {
                return h(a), a in n ? n[a] && "object" == typeof n[a] && n[a]._is_xml ? x.decode(n[a].xml) : n[a] : "undefined" == typeof b ? null : b
            },
            deleteKey: function(a) {
                return h(a), a in n ? (delete n[a], "object" == typeof n.__jstorage_meta.TTL && a in n.__jstorage_meta.TTL && delete n.__jstorage_meta.TTL[a], delete n.__jstorage_meta.CRC32[a], y(a, void 0), g(), e(), d(a, "deleted"), !0) : !1
            },
            setTTL: function(a, b) {
                var c = +new Date;
                return h(a), b = Number(b) || 0, a in n ? (n.__jstorage_meta.TTL || (n.__jstorage_meta.TTL = {}), b > 0 ? n.__jstorage_meta.TTL[a] = c + b : delete n.__jstorage_meta.TTL[a], g(), i(), e(), !0) : !1
            },
            getTTL: function(a) {
                var b = +new Date;
                return h(a), a in n && n.__jstorage_meta.TTL && n.__jstorage_meta.TTL[a] ? (a = n.__jstorage_meta.TTL[a] - b) || 0 : 0
            },
            flush: function() {
                return n = {
                    __jstorage_meta: {
                        CRC32: {}
                    }
                }, a("local", !0), g(), e(), d(null, "flushed"), !0
            },
            storageObj: function() {
                function a() {}
                return a.prototype = n, new a
            },
            index: function() {
                var a, b = [];
                for (a in n) n.hasOwnProperty(a) && "__jstorage_meta" != a && b.push(a);
                return b
            },
            storageSize: function() {
                return q
            },
            currentBackend: function() {
                return r
            },
            storageAvailable: function() {
                return !!r
            },
            listenKeyChange: function(a, b) {
                h(a), s[a] || (s[a] = []), s[a].push(b)
            },
            stopListening: function(a, b) {
                if (h(a), s[a])
                    if (b)
                        for (var c = s[a].length - 1; c >= 0; c--) s[a][c] == b && s[a].splice(c, 1);
                    else delete s[a]
            },
            subscribe: function(a, b) {
                if (a = (a || "").toString(), !a) throw new TypeError("Channel not defined");
                v[a] || (v[a] = []), v[a].push(b)
            },
            publish: function(a, b) {
                if (a = (a || "").toString(), !a) throw new TypeError("Channel not defined");
                n.__jstorage_meta || (n.__jstorage_meta = {}), n.__jstorage_meta.PubSub || (n.__jstorage_meta.PubSub = []), n.__jstorage_meta.PubSub.unshift([+new Date, a, b]), g(), e()
            },
            reInit: function() {
                b()
            }
        };
        a: {
            var z = !1;
            if ("localStorage" in window) try {
                window.localStorage.setItem("_tmptest", "tmpval"), z = !0, window.localStorage.removeItem("_tmptest")
            } catch (A) {}
            if (z) try {
                    window.localStorage && (o = window.localStorage, r = "localStorage", u = o.jStorage_update)
                } catch (B) {} else if ("globalStorage" in window) try {
                    window.globalStorage && (o = window.globalStorage[window.location.hostname], r = "globalStorage", u = o.jStorage_update)
                } catch (C) {} else {
                    if (p = document.createElement("link"), !p.addBehavior) {
                        p = null;
                        break a
                    }
                    p.style.behavior = "url(#default#userData)", document.getElementsByTagName("head")[0].appendChild(p);
                    try {
                        p.load("jStorage")
                    } catch (D) {
                        p.setAttribute("jStorage", "{}"), p.save("jStorage"), p.load("jStorage")
                    }
                    z = "{}";
                    try {
                        z = p.getAttribute("jStorage")
                    } catch (E) {}
                    try {
                        u = p.getAttribute("jStorage_update")
                    } catch (F) {}
                    o.jStorage = z, r = "userDataBehavior"
                }
                f(), i(), a("local"), a("session"), "localStorage" == r || "globalStorage" == r ? "addEventListener" in window ? window.addEventListener("storage", c, !1) : document.attachEvent("onstorage", c) : "userDataBehavior" == r && setInterval(c, 1e3), j(), "addEventListener" in window && window.addEventListener("pageshow", function(a) {
                a.persisted && c()
            }, !1)
        }
    }(), css_browser_selector(navigator.userAgent), "function" != typeof Object.create && (Object.create = function(a) {
        function b() {}
        return b.prototype = a, new b
    }),
    function(a) {
        var b = {
            init: function(b) {
                return this.options = a.extend({}, a.noty.defaults, b), this.options.layout = this.options.custom ? a.noty.layouts.inline : a.noty.layouts[this.options.layout], this.options.theme = a.noty.themes[this.options.theme], delete b.layout, delete b.theme, this.options = a.extend({}, this.options, this.options.layout.options), this.options.id = "noty_" + (new Date).getTime() * Math.floor(1e6 * Math.random()), this.options = a.extend({}, this.options, b), this._build(), this
            },
            _build: function() {
                var b = a('<div class="noty_bar"></div>').attr("id", this.options.id);
                if (b.append(this.options.template).find(".noty_text").html(this.options.text), this.$bar = null !== this.options.layout.parent.object ? a(this.options.layout.parent.object).css(this.options.layout.parent.css).append(b) : b, this.options.buttons) {
                    this.options.closeWith = [], this.options.timeout = !1;
                    var c = a("<div/>").addClass("noty_buttons");
                    null !== this.options.layout.parent.object ? this.$bar.find(".noty_bar").append(c) : this.$bar.append(c);
                    var d = this;
                    a.each(this.options.buttons, function(b, c) {
                        var e = a("<button/>").addClass(c.addClass ? c.addClass : "gray").html(c.text).appendTo(d.$bar.find(".noty_buttons")).bind("click", function() {
                            a.isFunction(c.onClick) && c.onClick.call(e, d)
                        })
                    })
                }
                this.$message = this.$bar.find(".noty_message"), this.$closeButton = this.$bar.find(".noty_close"), this.$buttons = this.$bar.find(".noty_buttons"), a.noty.store[this.options.id] = this
            },
            show: function() {
                var b = this;
                return a(b.options.layout.container.selector).append(b.$bar), b.options.theme.style.apply(b), "function" === a.type(b.options.layout.css) ? this.options.layout.css.apply(b.$bar) : b.$bar.css(this.options.layout.css || {}), b.$bar.addClass(b.options.layout.addClass), b.options.layout.container.style.apply(a(b.options.layout.container.selector)), b.options.theme.callback.onShow.apply(this), a.inArray("click", b.options.closeWith) > -1 && b.$bar.css("cursor", "pointer").one("click", function(a) {
                    b.stopPropagation(a), b.options.callback.onCloseClick && b.options.callback.onCloseClick.apply(b), b.close()
                }), a.inArray("hover", b.options.closeWith) > -1 && b.$bar.one("mouseenter", function() {
                    b.close()
                }), a.inArray("button", b.options.closeWith) > -1 && b.$closeButton.one("click", function(a) {
                    b.stopPropagation(a), b.close()
                }), -1 == a.inArray("button", b.options.closeWith) && b.$closeButton.remove(), b.options.callback.onShow && b.options.callback.onShow.apply(b), b.$bar.animate(b.options.animation.open, b.options.animation.speed, b.options.animation.easing, function() {
                    b.options.callback.afterShow && b.options.callback.afterShow.apply(b), b.shown = !0
                }), b.options.timeout && b.$bar.delay(b.options.timeout).promise().done(function() {
                    b.close()
                }), this
            },
            close: function() {
                if (!(this.closed || this.$bar && this.$bar.hasClass("i-am-closing-now"))) {
                    var b = this;
                    if (!this.shown) {
                        var c = [];
                        return a.each(a.noty.queue, function(a, d) {
                            d.options.id != b.options.id && c.push(d)
                        }), a.noty.queue = c, void 0
                    }
                    b.$bar.addClass("i-am-closing-now"), b.options.callback.onClose && b.options.callback.onClose.apply(b), b.$bar.clearQueue().stop().animate(b.options.animation.close, b.options.animation.speed, b.options.animation.easing, function() {
                        b.options.callback.afterClose && b.options.callback.afterClose.apply(b)
                    }).promise().done(function() {
                        b.options.modal && (a.notyRenderer.setModalCount(-1), 0 == a.notyRenderer.getModalCount() && a(".noty_modal").fadeOut("fast", function() {
                            a(this).remove()
                        })), a.notyRenderer.setLayoutCountFor(b, -1), 0 == a.notyRenderer.getLayoutCountFor(b) && a(b.options.layout.container.selector).remove(), "undefined" != typeof b.$bar && null !== b.$bar && (b.$bar.remove(), b.$bar = null, b.closed = !0), delete a.noty.store[b.options.id], b.options.theme.callback.onClose.apply(b), b.options.dismissQueue || (a.noty.ontap = !0, a.notyRenderer.render()), b.options.maxVisible > 0 && b.options.dismissQueue && a.notyRenderer.render()
                    })
                }
            },
            setText: function(a) {
                return this.closed || (this.options.text = a, this.$bar.find(".noty_text").html(a)), this
            },
            setType: function(a) {
                return this.closed || (this.options.type = a, this.options.theme.style.apply(this), this.options.theme.callback.onShow.apply(this)), this
            },
            setTimeout: function(a) {
                if (!this.closed) {
                    var b = this;
                    this.options.timeout = a, b.$bar.delay(b.options.timeout).promise().done(function() {
                        b.close()
                    })
                }
                return this
            },
            stopPropagation: function(a) {
                a = a || window.event, "undefined" != typeof a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0
            },
            closed: !1,
            shown: !1
        };
        a.notyRenderer = {}, a.notyRenderer.init = function(c) {
            var d = Object.create(b).init(c);
            return d.options.force ? a.noty.queue.unshift(d) : a.noty.queue.push(d), a.notyRenderer.render(), "object" == a.noty.returns ? d : d.options.id
        }, a.notyRenderer.render = function() {
            var b = a.noty.queue[0];
            "object" === a.type(b) ? b.options.dismissQueue ? b.options.maxVisible > 0 ? a(b.options.layout.container.selector + " li").length < b.options.maxVisible && a.notyRenderer.show(a.noty.queue.shift()) : a.notyRenderer.show(a.noty.queue.shift()) : a.noty.ontap && (a.notyRenderer.show(a.noty.queue.shift()), a.noty.ontap = !1) : a.noty.ontap = !0
        }, a.notyRenderer.show = function(b) {
            b.options.modal && (a.notyRenderer.createModalFor(b), a.notyRenderer.setModalCount(1)), 0 == a(b.options.layout.container.selector).length ? b.options.custom ? b.options.custom.append(a(b.options.layout.container.object).addClass("i-am-new")) : a("body").append(a(b.options.layout.container.object).addClass("i-am-new")) : a(b.options.layout.container.selector).removeClass("i-am-new"), a.notyRenderer.setLayoutCountFor(b, 1), b.show()
        }, a.notyRenderer.createModalFor = function(b) {
            0 == a(".noty_modal").length && a("<div/>").addClass("noty_modal").data("noty_modal_count", 0).css(b.options.theme.modal.css).prependTo(a("body")).fadeIn("fast")
        }, a.notyRenderer.getLayoutCountFor = function(b) {
            return a(b.options.layout.container.selector).data("noty_layout_count") || 0
        }, a.notyRenderer.setLayoutCountFor = function(b, c) {
            return a(b.options.layout.container.selector).data("noty_layout_count", a.notyRenderer.getLayoutCountFor(b) + c)
        }, a.notyRenderer.getModalCount = function() {
            return a(".noty_modal").data("noty_modal_count") || 0
        }, a.notyRenderer.setModalCount = function(b) {
            return a(".noty_modal").data("noty_modal_count", a.notyRenderer.getModalCount() + b)
        }, a.fn.noty = function(b) {
            return b.custom = a(this), a.notyRenderer.init(b)
        }, a.noty = {}, a.noty.queue = [], a.noty.ontap = !0, a.noty.layouts = {}, a.noty.themes = {}, a.noty.returns = "object", a.noty.store = {}, a.noty.get = function(b) {
            return a.noty.store.hasOwnProperty(b) ? a.noty.store[b] : !1
        }, a.noty.close = function(b) {
            return a.noty.get(b) ? a.noty.get(b).close() : !1
        }, a.noty.setText = function(b, c) {
            return a.noty.get(b) ? a.noty.get(b).setText(c) : !1
        }, a.noty.setType = function(b, c) {
            return a.noty.get(b) ? a.noty.get(b).setType(c) : !1
        }, a.noty.clearQueue = function() {
            a.noty.queue = []
        }, a.noty.closeAll = function() {
            a.noty.clearQueue(), a.each(a.noty.store, function(a, b) {
                b.close()
            })
        };
        var c = window.alert;
        a.noty.consumeAlert = function(b) {
            window.alert = function(c) {
                b ? b.text = c : b = {
                    text: c
                }, a.notyRenderer.init(b)
            }
        }, a.noty.stopConsumeAlert = function() {
            window.alert = c
        }, a.noty.defaults = {
            layout: "top",
            theme: "defaultTheme",
            type: "alert",
            text: "",
            dismissQueue: !0,
            template: '<div class="noty_message"><span class="noty_text"></span><div class="noty_close"></div></div>',
            animation: {
                open: {
                    height: "toggle"
                },
                close: {
                    height: "toggle"
                },
                easing: "swing",
                speed: 500
            },
            timeout: !1,
            force: !1,
            modal: !1,
            maxVisible: 5,
            closeWith: ["click"],
            callback: {
                onShow: function() {},
                afterShow: function() {},
                onClose: function() {},
                afterClose: function() {},
                onCloseClick: function() {}
            },
            buttons: !1
        }, a(window).resize(function() {
            a.each(a.noty.layouts, function(b, c) {
                c.container.style.apply(a(c.container.selector))
            })
        })
    }(jQuery), window.noty = function(a) {
        var b = 0,
            c = {
                animateOpen: "animation.open",
                animateClose: "animation.close",
                easing: "animation.easing",
                speed: "animation.speed",
                onShow: "callback.onShow",
                onShown: "callback.afterShow",
                onClose: "callback.onClose",
                onCloseClick: "callback.onCloseClick",
                onClosed: "callback.afterClose"
            };
        return jQuery.each(a, function(d, e) {
            if (c[d]) {
                b++;
                var f = c[d].split(".");
                a[f[0]] || (a[f[0]] = {}), a[f[0]][f[1]] = e ? e : function() {}, delete a[d]
            }
        }), a.closeWith || (a.closeWith = jQuery.noty.defaults.closeWith), a.hasOwnProperty("closeButton") && (b++, a.closeButton && a.closeWith.push("button"), delete a.closeButton), a.hasOwnProperty("closeOnSelfClick") && (b++, a.closeOnSelfClick && a.closeWith.push("click"), delete a.closeOnSelfClick), a.hasOwnProperty("closeOnSelfOver") && (b++, a.closeOnSelfOver && a.closeWith.push("hover"), delete a.closeOnSelfOver), a.hasOwnProperty("custom") && (b++, "null" != a.custom.container && (a.custom = a.custom.container)), a.hasOwnProperty("cssPrefix") && (b++, delete a.cssPrefix), "noty_theme_default" == a.theme && (b++, a.theme = "defaultTheme"), a.hasOwnProperty("dismissQueue") || (a.dismissQueue = jQuery.noty.defaults.dismissQueue), a.hasOwnProperty("maxVisible") || (a.maxVisible = jQuery.noty.defaults.maxVisible), a.buttons && jQuery.each(a.buttons, function(a, c) {
            c.click && (b++, c.onClick = c.click, delete c.click), c.type && (b++, c.addClass = c.type, delete c.type)
        }), b && "undefined" != typeof console && console.warn && console.warn("You are using noty v2 with v1.x.x options. @deprecated until v2.2.0 - Please update your options."), jQuery.notyRenderer.init(a)
    },
    function(a) {
        a.noty.layouts.inline = {
            name: "inline",
            options: {},
            container: {
                object: '<ul id="noty_inline_container" />',
                selector: "ul#noty_inline_container",
                style: function() {}
            },
            parent: {
                object: "<li />",
                selector: "li",
                css: {}
            },
            css: {},
            addClass: ""
        }
    }(jQuery),
    function(a) {
        a.noty.themes.defaultTheme = {
            name: "defaultTheme",
            helpers: {},
            modal: {
                css: {
                    position: "fixed",
                    width: "100%",
                    height: "100%",
                    backgroundColor: "#000",
                    zIndex: 1e3,
                    opacity: .5,
                    display: "none",
                    left: 0,
                    top: 0
                }
            },
            style: function() {
                this.$bar.css({
                    opacity: 0
                }), this.options.type && "alert" != this.options.type && "notification" != this.options.type && this.$bar.addClass(this.options.type)
            },
            callback: {
                onShow: function() {},
                onClose: function() {}
            }
        }
    }(jQuery),
    function(a) {
        function b() {
            var b = c(this);
            return isNaN(b.datetime) || a(this).text(d(b.datetime)), this
        }

        function c(b) {
            if (b = a(b), !b.data("timeago")) {
                b.data("timeago", {
                    datetime: f.datetime(b)
                });
                var c = a.trim(b.text());
                c.length > 0 && b.attr("title", c)
            }
            return b.data("timeago")
        }

        function d(a) {
            return f.inWords(e(a))
        }

        function e(a) {
            return (new Date).getTime() - a.getTime()
        }
        a.timeago = function(b) {
            return b instanceof Date ? d(b) : "string" == typeof b ? d(a.timeago.parse(b)) : d(a.timeago.datetime(b))
        };
        var f = a.timeago;
        a.extend(a.timeago, {
            settings: {
                refreshMillis: 6e4,
                allowFuture: !1,
                strings: {
                    prefixAgo: null,
                    prefixFromNow: null,
                    suffixAgo: "ago",
                    suffixFromNow: "from now",
                    seconds: "less than a minute",
                    minute: "about a minute",
                    minutes: "%d minutes",
                    hour: "about an hour",
                    hours: "about %d hours",
                    day: "a day",
                    days: "%d days",
                    month: "about a month",
                    months: "%d months",
                    year: "about a year",
                    years: "%d years",
                    numbers: []
                }
            },
            inWords: function(b) {
                function c(c, e) {
                    var f = a.isFunction(c) ? c(e, b) : c,
                        g = d.numbers && d.numbers[e] || e;
                    return f.replace(/%d/i, g)
                }
                var d = this.settings.strings,
                    e = d.prefixAgo,
                    f = d.suffixAgo;
                this.settings.allowFuture && (0 > b && (e = d.prefixFromNow, f = d.suffixFromNow), b = Math.abs(b));
                var g = b / 1e3,
                    h = g / 60,
                    i = h / 60,
                    j = i / 24,
                    k = j / 365,
                    l = 45 > g && c(d.seconds, Math.round(g)) || 90 > g && c(d.minute, 1) || 45 > h && c(d.minutes, Math.round(h)) || 90 > h && c(d.hour, 1) || 24 > i && c(d.hours, Math.round(i)) || 48 > i && c(d.day, 1) || 30 > j && c(d.days, Math.floor(j)) || 60 > j && c(d.month, 1) || 365 > j && c(d.months, Math.floor(j / 30)) || 2 > k && c(d.year, 1) || c(d.years, Math.floor(k));
                return a.trim([e, l, f].join(" "))
            },
            parse: function(b) {
                var c = a.trim(b);
                return c = c.replace(/\.\d\d\d+/, ""), c = c.replace(/-/, "/").replace(/-/, "/"), c = c.replace(/T/, " ").replace(/Z/, " UTC"), c = c.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2"), new Date(c)
            },
            datetime: function(b) {
                var c = "time" === a(b).get(0).tagName.toLowerCase(),
                    d = c ? a(b).attr("datetime") : a(b).attr("title");
                return f.parse(d)
            }
        }), a.fn.timeago = function() {
            var a = this;
            a.each(b);
            var c = f.settings;
            return c.refreshMillis > 0 && setInterval(function() {
                a.each(b)
            }, c.refreshMillis), a
        }, document.createElement("abbr"), document.createElement("time")
    }(jQuery),
    function(a) {
        a.fn.placehold = function(b) {
            function c() {
                for (i = 0; i < arguments.length; i++) arguments[i].toggle()
            }
            var b = b || "placeholder",
                d = a.fn.placehold.is_supported();
            return d ? this : this.each(function() {
                var d = a(this),
                    e = d.attr("placeholder");
                if (e) {
                    if (d.val() && d.val() != e || d.addClass(b).val(e), "password" == d.attr("type")) {
                        var f = a("<input />", {
                            "class": d.attr("class") + " " + b,
                            value: e
                        });
                        f.bind("focus.placehold", function() {
                            c(d, f), d.focus()
                        }), d.bind("blur.placehold", function() {
                            d.val() || c(d, f)
                        }), d.hide().after(f)
                    }
                    d.bind({
                        "focus.placehold": function() {
                            d.val() == e && d.removeClass(b).val("")
                        },
                        "blur.placehold": function() {
                            d.val() || d.addClass(b).val(e)
                        }
                    }), d.closest("form").bind("submit.placehold", function() {
                        return d.val() == e && d.val(""), !0
                    })
                }
            })
        }, a.fn.placehold.is_supported = function() {
            return "placeholder" in document.createElement("input")
        }
    }(jQuery),
    function(a) {
        var b, c, d, e, f, g, h, i, j, k, l, m, n = 0,
            o = {},
            p = [],
            q = 0,
            r = {},
            s = [],
            t = null,
            u = new Image,
            v = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,
            w = /[^\.]\.(swf)\s*$/i,
            x = 0,
            y = "",
            z = !1,
            A = a.extend(a("<div/>")[0], {
                prop: 0
            }),
            B = a.browser.msie && a.browser.version < 7 && !window.XMLHttpRequest,
            C = function() {
                c.hide(), u.onerror = u.onload = null, t && t.abort(), b.empty()
            },
            D = function() {
                return !1 === o.onError(p, n, o) ? (c.hide(), z = !1, void 0) : (o.titleShow = !1, o.width = "auto", o.height = "auto", b.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>'), F(), void 0)
            },
            E = function() {
                var d, e, f, h, i, j, k = p[n];
                if (C(), o = a.extend({}, a.fn.fancybox.defaults, "undefined" == typeof a(k).data("fancybox") ? o : a(k).data("fancybox")), j = o.onStart(p, n, o), j === !1) return z = !1, void 0;
                if ("object" == typeof j && (o = a.extend(o, j)), f = o.title || (k.nodeName ? a(k).attr("title") : k.title) || "", k.nodeName && !o.orig && (o.orig = a(k).children("img:first").length ? a(k).children("img:first") : a(k)), "" === f && o.orig && o.titleFromAlt && (f = o.orig.attr("alt")), d = o.href || (k.nodeName ? a(k).attr("href") : k.href) || null, (/^(?:javascript)/i.test(d) || "#" == d) && (d = null), o.type ? (e = o.type, d || (d = o.content)) : o.content ? e = "html" : d && (e = d.match(v) ? "image" : d.match(w) ? "swf" : a(k).hasClass("iframe") ? "iframe" : 0 === d.indexOf("#") ? "inline" : "ajax"), !e) return D(), void 0;
                switch ("inline" == e && (k = d.substr(d.indexOf("#")), e = a(k).length > 0 ? "inline" : "ajax"), o.type = e, o.href = d, o.title = f, o.autoDimensions && ("html" == o.type || "inline" == o.type || "ajax" == o.type ? (o.width = "auto", o.height = "auto") : o.autoDimensions = !1), o.modal && (o.overlayShow = !0, o.hideOnOverlayClick = !1, o.hideOnContentClick = !1, o.enableEscapeButton = !1, o.showCloseButton = !1), o.padding = parseInt(o.padding, 10), o.margin = parseInt(o.margin, 10), b.css("padding", o.padding + o.margin), a(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change", function() {
                    a(this).replaceWith(g.children())
                }), e) {
                    case "html":
                        b.html(o.content), F();
                        break;
                    case "inline":
                        if (a(k).parent().is("#fancybox-content") === !0) return z = !1, void 0;
                        a('<div class="fancybox-inline-tmp" />').hide().insertBefore(a(k)).bind("fancybox-cleanup", function() {
                            a(this).replaceWith(g.children())
                        }).bind("fancybox-cancel", function() {
                            a(this).replaceWith(b.children())
                        }), a(k).appendTo(b), F();
                        break;
                    case "image":
                        z = !1, a.fancybox.showActivity(), u = new Image, u.onerror = function() {
                            D()
                        }, u.onload = function() {
                            z = !0, u.onerror = u.onload = null, G()
                        }, u.src = d;
                        break;
                    case "swf":
                        o.scrolling = "no", h = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + o.width + '" height="' + o.height + '"><param name="movie" value="' + d + '"></param>', i = "", a.each(o.swf, function(a, b) {
                            h += '<param name="' + a + '" value="' + b + '"></param>', i += " " + a + '="' + b + '"'
                        }), h += '<embed src="' + d + '" type="application/x-shockwave-flash" width="' + o.width + '" height="' + o.height + '"' + i + "></embed></object>", b.html(h), F();
                        break;
                    case "ajax":
                        z = !1, a.fancybox.showActivity(), o.ajax.win = o.ajax.success, t = a.ajax(a.extend({}, o.ajax, {
                            url: d,
                            data: o.ajax.data || {},
                            error: function(a) {
                                a.status > 0 && D()
                            },
                            success: function(a, e, f) {
                                var g = "object" == typeof f ? f : t;
                                if (200 == g.status) {
                                    if ("function" == typeof o.ajax.win) {
                                        if (j = o.ajax.win(d, a, e, f), j === !1) return c.hide(), void 0;
                                        ("string" == typeof j || "object" == typeof j) && (a = j)
                                    }
                                    b.html(a), F()
                                }
                            }
                        }));
                        break;
                    case "iframe":
                        H()
                }
            },
            F = function() {
                var c = o.width,
                    d = o.height;
                c = c.toString().indexOf("%") > -1 ? parseInt((a(window).width() - 2 * o.margin) * parseFloat(c) / 100, 10) + "px" : "auto" == c ? "auto" : c + "px", d = d.toString().indexOf("%") > -1 ? parseInt((a(window).height() - 2 * o.margin) * parseFloat(d) / 100, 10) + "px" : "auto" == d ? "auto" : d + "px", b.wrapInner('<div style="width:' + c + ";height:" + d + ";overflow: " + ("auto" == o.scrolling ? "auto" : "yes" == o.scrolling ? "scroll" : "hidden") + ';position:relative;"></div>'), o.width = b.width(), o.height = b.height(), H()
            },
            G = function() {
                o.width = u.width, o.height = u.height, a(u).attr({
                    id: "fancybox-img",
                    alt: o.title
                }).appendTo(b), H()
            },
            H = function() {
                var f, t;
                return c.hide(), e.is(":visible") && !1 === r.onCleanup(s, q, r) ? (a.event.trigger("fancybox-cancel"), z = !1, void 0) : (z = !0, a(g.add(d)).unbind(), a(window).unbind("resize.fb scroll.fb"), a(document).unbind("keydown.fb"), e.is(":visible") && "outside" !== r.titlePosition && e.css("height", e.height()), s = p, q = n, r = o, r.overlayShow ? (d.css({
                    "background-color": r.overlayColor,
                    opacity: r.overlayOpacity,
                    cursor: r.hideOnOverlayClick ? "pointer" : "auto",
                    height: a(document).height()
                }), d.is(":visible") || (B && a("select:not(#fancybox-tmp select)").filter(function() {
                    return "hidden" !== this.style.visibility
                }).css({
                    visibility: "hidden"
                }).one("fancybox-cleanup", function() {
                    this.style.visibility = "inherit"
                }), d.show())) : d.hide(), m = P(), J(), e.is(":visible") ? (a(h.add(j).add(k)).hide(), f = e.position(), l = {
                    top: f.top,
                    left: f.left,
                    width: e.width(),
                    height: e.height()
                }, t = l.width == m.width && l.height == m.height, g.fadeTo(r.changeFade, .3, function() {
                    var c = function() {
                        g.html(b.contents()).fadeTo(r.changeFade, 1, L)
                    };
                    a.event.trigger("fancybox-change"), g.empty().removeAttr("filter").css({
                        "border-width": r.padding,
                        width: m.width - 2 * r.padding,
                        height: o.autoDimensions ? "auto" : m.height - x - 2 * r.padding
                    }), t ? c() : (A.prop = 0, a(A).animate({
                        prop: 1
                    }, {
                        duration: r.changeSpeed,
                        easing: r.easingChange,
                        step: N,
                        complete: c
                    }))
                }), void 0) : (e.removeAttr("style"), g.css("border-width", r.padding), "elastic" == r.transitionIn ? (l = R(), g.html(b.contents()), e.show(), r.opacity && (m.opacity = 0), A.prop = 0, a(A).animate({
                    prop: 1
                }, {
                    duration: r.speedIn,
                    easing: r.easingIn,
                    step: N,
                    complete: L
                }), void 0) : ("inside" == r.titlePosition && x > 0 && i.show(), g.css({
                    width: m.width - 2 * r.padding,
                    height: o.autoDimensions ? "auto" : m.height - x - 2 * r.padding
                }).html(b.contents()), e.css(m).fadeIn("none" == r.transitionIn ? 0 : r.speedIn, L), void 0)))
            },
            I = function(a) {
                return a && a.length ? "float" == r.titlePosition ? '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + a + '</td><td id="fancybox-title-float-right"></td></tr></table>' : '<div id="fancybox-title-' + r.titlePosition + '">' + a + "</div>" : !1
            },
            J = function() {
                if (y = r.title || "", x = 0, i.empty().removeAttr("style").removeClass(), r.titleShow === !1) return i.hide(), void 0;
                if (y = a.isFunction(r.titleFormat) ? r.titleFormat(y, s, q, r) : I(y), !y || "" === y) return i.hide(), void 0;
                switch (i.addClass("fancybox-title-" + r.titlePosition).html(y).appendTo("body").show(), r.titlePosition) {
                    case "inside":
                        i.css({
                            width: m.width - 2 * r.padding,
                            marginLeft: r.padding,
                            marginRight: r.padding
                        }), x = i.outerHeight(!0), i.appendTo(f), m.height += x;
                        break;
                    case "over":
                        i.css({
                            marginLeft: r.padding,
                            width: m.width - 2 * r.padding,
                            bottom: r.padding
                        }).appendTo(f);
                        break;
                    case "float":
                        i.css("left", -1 * parseInt((i.width() - m.width - 40) / 2, 10)).appendTo(e);
                        break;
                    default:
                        i.css({
                            width: m.width - 2 * r.padding,
                            paddingLeft: r.padding,
                            paddingRight: r.padding
                        }).appendTo(e)
                }
                i.hide()
            },
            K = function() {
                return (r.enableEscapeButton || r.enableKeyboardNav) && a(document).bind("keydown.fb", function(b) {
                    27 == b.keyCode && r.enableEscapeButton ? (b.preventDefault(), a.fancybox.close()) : 37 != b.keyCode && 39 != b.keyCode || !r.enableKeyboardNav || "INPUT" === b.target.tagName || "TEXTAREA" === b.target.tagName || "SELECT" === b.target.tagName || (b.preventDefault(), a.fancybox[37 == b.keyCode ? "prev" : "next"]())
                }), r.showNavArrows ? ((r.cyclic && s.length > 1 || 0 !== q) && j.show(), (r.cyclic && s.length > 1 || q != s.length - 1) && k.show(), void 0) : (j.hide(), k.hide(), void 0)
            },
            L = function() {
                a.support.opacity || (g.get(0).style.removeAttribute("filter"), e.get(0).style.removeAttribute("filter")), o.autoDimensions && g.css("height", "auto"), e.css("height", "auto"), y && y.length && i.show(), r.showCloseButton && h.show(), K(), r.hideOnContentClick && g.bind("click", a.fancybox.close), r.hideOnOverlayClick && d.bind("click", a.fancybox.close), a(window).bind("resize.fb", a.fancybox.resize), r.centerOnScroll && a(window).bind("scroll.fb", a.fancybox.center), "iframe" == r.type && a('<iframe id="fancybox-frame" name="fancybox-frame' + (new Date).getTime() + '" frameborder="0" hspace="0" ' + (a.browser.msie ? 'allowtransparency="true""' : "") + ' scrolling="' + o.scrolling + '" src="' + r.href + '"></iframe>').appendTo(g), e.show(), z = !1, a.fancybox.center(), r.onComplete(s, q, r), M()
            },
            M = function() {
                var a, b;
                s.length - 1 > q && (a = s[q + 1].href, "undefined" != typeof a && a.match(v) && (b = new Image, b.src = a)), q > 0 && (a = s[q - 1].href, "undefined" != typeof a && a.match(v) && (b = new Image, b.src = a))
            },
            N = function(a) {
                var b = {
                    width: parseInt(l.width + (m.width - l.width) * a, 10),
                    height: parseInt(l.height + (m.height - l.height) * a, 10),
                    top: parseInt(l.top + (m.top - l.top) * a, 10),
                    left: parseInt(l.left + (m.left - l.left) * a, 10)
                };
                "undefined" != typeof m.opacity && (b.opacity = .5 > a ? .5 : a), e.css(b), g.css({
                    width: b.width - 2 * r.padding,
                    height: b.height - x * a - 2 * r.padding
                })
            },
            O = function() {
                return [a(window).width() - 2 * r.margin, a(window).height() - 2 * r.margin, a(document).scrollLeft() + r.margin, a(document).scrollTop() + r.margin]
            },
            P = function() {
                var a, b = O(),
                    c = {},
                    d = r.autoScale,
                    e = 2 * r.padding;
                return c.width = r.width.toString().indexOf("%") > -1 ? parseInt(b[0] * parseFloat(r.width) / 100, 10) : r.width + e, c.height = r.height.toString().indexOf("%") > -1 ? parseInt(b[1] * parseFloat(r.height) / 100, 10) : r.height + e, d && (c.width > b[0] || c.height > b[1]) && ("image" == o.type || "swf" == o.type ? (a = r.width / r.height, c.width > b[0] && (c.width = b[0], c.height = parseInt((c.width - e) / a + e, 10)), c.height > b[1] && (c.height = b[1], c.width = parseInt((c.height - e) * a + e, 10))) : (c.width = Math.min(c.width, b[0]), c.height = Math.min(c.height, b[1]))), c.top = parseInt(Math.max(b[3] - 20, b[3] + .5 * (b[1] - c.height - 40)), 10), c.left = parseInt(Math.max(b[2] - 20, b[2] + .5 * (b[0] - c.width - 40)), 10), c
            },
            Q = function(a) {
                var b = a.offset();
                return b.top += parseInt(a.css("paddingTop"), 10) || 0, b.left += parseInt(a.css("paddingLeft"), 10) || 0, b.top += parseInt(a.css("border-top-width"), 10) || 0, b.left += parseInt(a.css("border-left-width"), 10) || 0, b.width = a.width(), b.height = a.height(), b
            },
            R = function() {
                var b, c, d = o.orig ? a(o.orig) : !1,
                    e = {};
                return d && d.length ? (b = Q(d), e = {
                    width: b.width + 2 * r.padding,
                    height: b.height + 2 * r.padding,
                    top: b.top - r.padding - 20,
                    left: b.left - r.padding - 20
                }) : (c = O(), e = {
                    width: 2 * r.padding,
                    height: 2 * r.padding,
                    top: parseInt(c[3] + .5 * c[1], 10),
                    left: parseInt(c[2] + .5 * c[0], 10)
                }), e
            };
        a.fn.fancybox = function(b) {
            return a(this).length ? (a(this).data("fancybox", a.extend({}, b, a.metadata ? a(this).metadata() : {})).unbind("click.fb").bind("click.fb", function(b) {
                if (b.preventDefault(), !z) {
                    z = !0, a(this).blur(), p = [], n = 0;
                    var c = a(this).attr("rel") || "";
                    c && "" != c && "nofollow" !== c ? (p = a("a[rel=" + c + "], area[rel=" + c + "]"), n = p.index(this)) : p.push(this), E()
                }
            }), this) : this
        }, a.fancybox = function(b) {
            var c;
            if (!z) {
                if (z = !0, c = "undefined" != typeof arguments[1] ? arguments[1] : {}, p = [], n = parseInt(c.index, 10) || 0, a.isArray(b)) {
                    for (var d = 0, e = b.length; e > d; d++) "object" == typeof b[d] ? a(b[d]).data("fancybox", a.extend({}, c, b[d])) : b[d] = a({}).data("fancybox", a.extend({
                        content: b[d]
                    }, c));
                    p = jQuery.merge(p, b)
                } else "object" == typeof b ? a(b).data("fancybox", a.extend({}, c, b)) : b = a({}).data("fancybox", a.extend({
                    content: b
                }, c)), p.push(b);
                (n > p.length || 0 > n) && (n = 0), E()
            }
        }, a.fancybox.showActivity = function() {
            c.show()
        }, a.fancybox.hideActivity = function() {
            c.hide()
        }, a.fancybox.next = function() {
            return a.fancybox.pos(q + 1)
        }, a.fancybox.prev = function() {
            return a.fancybox.pos(q - 1)
        }, a.fancybox.pos = function(a) {
            z || (a = parseInt(a), p = s, a > -1 && a < s.length ? (n = a, E()) : r.cyclic && s.length > 1 && (n = a >= s.length ? 0 : s.length - 1, E()))
        }, a.fancybox.cancel = function() {
            z || (z = !0, a.event.trigger("fancybox-cancel"), C(), o.onCancel(p, n, o), z = !1)
        }, a.fancybox.close = function() {
            function b() {
                d.fadeOut("fast"), i.empty().hide(), e.hide(), a.event.trigger("fancybox-cleanup"), g.empty(), r.onClosed(s, q, r), s = o = [], q = n = 0, r = o = {}, z = !1
            }
            if (!z && !e.is(":hidden")) {
                if (z = !0, r && !1 === r.onCleanup(s, q, r)) return z = !1, void 0;
                if (C(), a(h.add(j).add(k)).hide(), a(g.add(d)).unbind(), a(window).unbind("resize.fb scroll.fb"), a(document).unbind("keydown.fb"), g.find("iframe").attr("src", B && /^https/i.test(window.location.href || "") ? "javascript:void(false)" : "about:blank"), "inside" !== r.titlePosition && i.empty(), e.stop(), "elastic" == r.transitionOut) {
                    l = R();
                    var c = e.position();
                    m = {
                        top: c.top,
                        left: c.left,
                        width: e.width(),
                        height: e.height()
                    }, r.opacity && (m.opacity = 1), i.empty().hide(), A.prop = 1, a(A).animate({
                        prop: 0
                    }, {
                        duration: r.speedOut,
                        easing: r.easingOut,
                        step: N,
                        complete: b
                    })
                } else e.fadeOut("none" == r.transitionOut ? 0 : r.speedOut, b)
            }
        }, a.fancybox.resize = function() {
            d.is(":visible") && d.css("height", a(document).height()), a.fancybox.center(!0)
        }, a.fancybox.center = function() {
            var a, b;
            z || (b = arguments[0] === !0 ? 1 : 0, a = O(), (b || !(e.width() > a[0] || e.height() > a[1])) && e.stop().animate({
                top: parseInt(Math.max(a[3] - 20, a[3] + .5 * (a[1] - g.height() - 40) - r.padding)),
                left: parseInt(Math.max(a[2] - 20, a[2] + .5 * (a[0] - g.width() - 40) - r.padding))
            }, "number" == typeof arguments[0] ? arguments[0] : 200))
        }, a.fancybox.init = function() {
            a("#fancybox-wrap").length || (a("body").append(b = a('<div id="fancybox-tmp"></div>'), c = a('<div id="fancybox-loading"><div></div></div>'), d = a('<div id="fancybox-overlay"></div>'), e = a('<div id="fancybox-wrap"></div>')), f = a('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(e), f.append(g = a('<div id="fancybox-content"></div>'), h = a('<a id="fancybox-close"><i class="icon-close2"></i></a>'), i = a('<div id="fancybox-title"></div>'), j = a('<a href="javascript:;" id="fancybox-left" style="display:none;"><i class="fancy-ico icon-pointer" id="fancybox-left-ico"></i></a>'), k = a('<a href="javascript:;" id="fancybox-right" style="display:none;"><i class="fancy-ico icon-pointer" id="fancybox-right-ico"></i></a>')), h.click(a.fancybox.close), c.click(a.fancybox.cancel), j.click(function(b) {
                b.preventDefault(), a.fancybox.prev()
            }), k.click(function(b) {
                b.preventDefault(), a.fancybox.next()
            }), a.fn.mousewheel && e.bind("mousewheel.fb", function(b, c) {
                z ? b.preventDefault() : (0 == a(b.target).get(0).clientHeight || a(b.target).get(0).scrollHeight === a(b.target).get(0).clientHeight) && (b.preventDefault(), a.fancybox[c > 0 ? "prev" : "next"]())
            }), a.support.opacity || e.addClass("fancybox-ie"), B && (c.addClass("fancybox-ie6"), e.addClass("fancybox-ie6"), a('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || "") ? "javascript:void(false)" : "about:blank") + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(f)))
        }, a.fn.fancybox.defaults = {
            padding: 10,
            margin: 40,
            opacity: !1,
            modal: !1,
            cyclic: !1,
            scrolling: "auto",
            width: 560,
            height: 340,
            autoScale: !0,
            autoDimensions: !0,
            centerOnScroll: !1,
            ajax: {},
            swf: {
                wmode: "transparent"
            },
            hideOnOverlayClick: !0,
            hideOnContentClick: !1,
            overlayShow: !0,
            overlayOpacity: .7,
            overlayColor: "#777",
            titleShow: !0,
            titlePosition: "float",
            titleFormat: null,
            titleFromAlt: !1,
            transitionIn: "fade",
            transitionOut: "fade",
            speedIn: 300,
            speedOut: 300,
            changeSpeed: 300,
            changeFade: "fast",
            easingIn: "swing",
            easingOut: "swing",
            showCloseButton: !0,
            showNavArrows: !0,
            enableEscapeButton: !0,
            enableKeyboardNav: !0,
            onStart: function() {},
            onCancel: function() {},
            onComplete: function() {},
            onCleanup: function() {},
            onClosed: function() {},
            onError: function() {}
        }, a(document).ready(function() {
            a.fancybox.init()
        })
    }(jQuery),
    function(a, b, c, d, e, f, g, h, i) {
        function j(a) {
            return a && typeof a === b && !(typeof a.length === c && !a.propertyIsEnumerable(d))
        }

        function k(a) {
            return a && typeof a === b && typeof a.length === c && !a.propertyIsEnumerable(d)
        }

        function l(a) {
            return a && "function" == typeof a
        }

        function l(a) {
            return a && "function" == typeof a
        }

        function m(a) {
            return "[object String]" === e.apply(a)
        }

        function n(a) {
            return l(a) && a.prototype && a === a.prototype.constructor
        }

        function o(a, b, c, d, e, f) {
            c && c.hasOwnProperty(a) || (d[a] = b, e && (f[a] = b))
        }

        function p(a, b, c) {
            if (k(b))
                for (var d = b.length; --d >= 0;) p(a, b[d], c);
            else {
                c = c || {
                    constructor: 1,
                    $super: 1,
                    prototype: 1,
                    $superb: 1
                };
                var e, f, g = n(a),
                    h = n(b),
                    i = a.prototype;
                if (j(b))
                    for (e in b) o(e, b[e], c, a, g, i);
                if (h) {
                    f = b.prototype;
                    for (e in f) o(e, f[e], c, a, g, i)
                }
                g && h && p(i, b.prototype, c)
            }
        }

        function q(a, b) {
            b || (b = a, a = 0);
            var c, d, e, f, g, h, i, j, m = 0,
                n = {
                    constructor: 1,
                    $singleton: 1,
                    $statics: 1,
                    prototype: 1,
                    $super: 1,
                    $superp: 1,
                    main: 1
                },
                o = q.overload,
                p = q.plugins;
            b = ("function" == typeof b ? b() : b) || {}, d = b.hasOwnProperty("constructor") ? b.constructor : 0, e = b.$singleton, f = b.$statics;
            for (g in p) n[g] = 1;
            for (c = e ? {} : d ? o ? o("constructor", d) : d : function() {}, h = e ? c : c.prototype, a = !a || k(a) ? a : [a], i = a && a.length; i > m;) {
                j = a[m++];
                for (g in j) n[g] || (h[g] = j[g], e || (c[g] = j[g]));
                for (g in j.prototype) n[g] || (h[g] = j.prototype[g])
            }
            for (g in b) n[g] || (h[g] = b[g]);
            for (g in f) c[g] = h[g] = f[g];
            e || (j = a && a[0] || a, c.$super = j, c.$superp = j && j.prototype ? j.prototype : j);
            for (g in p) p[g](c, a, b);
            return l(b.main) && b.main.call(c, c), c
        }
        q.plugins = {}, i = {
            version: f,
            Class: q,
            extend: p,
            isMap: j,
            isArray: k,
            isFunction: l,
            isString: m,
            isClass: n
        }, "undefined" != typeof module && module.exports ? module.exports = i : (h = a.Class, a.Class = q, a.jsface = i, i.noConflict = function() {
            a.Class = h
        })
    }(this, "object", "number", "length", Object.prototype.toString, "2.1.1"),
    function(a) {
        var b = a.jsface,
            c = b.Class,
            d = b.isFunction,
            e = [],
            f = 0;
        c.plugins.$ready = function(a, b, c) {
            for (var g, h, i, j = c.$ready, k = b ? b.length : 0, l = k; k--;)
                for (h = 0; f > h && (i = e[h], g = b[k], g === i[0] && (i[1].call(g, a, b, c), l--), l); h++);
            d(j) && (j.call(a, a, b, c), e.push([a, j]), f++)
        }
    }(this),
    function() {
        var a;
        a = function() {
            function a() {
                this.options_index = 0, this.parsed = []
            }
            return a.prototype.add_node = function(a) {
                return "OPTGROUP" === a.nodeName.toUpperCase() ? this.add_group(a) : this.add_option(a)
            }, a.prototype.add_group = function(a) {
                var b, c, d, e, f, g;
                for (b = this.parsed.length, this.parsed.push({
                        array_index: b,
                        group: !0,
                        label: a.label,
                        children: 0,
                        disabled: a.disabled
                    }), f = a.childNodes, g = [], d = 0, e = f.length; e > d; d++) c = f[d], g.push(this.add_option(c, b, a.disabled));
                return g
            }, a.prototype.add_option = function(a, b, c) {
                return "OPTION" === a.nodeName.toUpperCase() ? ("" !== a.text ? (null != b && (this.parsed[b].children += 1), this.parsed.push({
                    array_index: this.parsed.length,
                    options_index: this.options_index,
                    value: a.value,
                    text: a.text,
                    html: a.innerHTML,
                    selected: a.selected,
                    disabled: c === !0 ? c : a.disabled,
                    group_array_index: b,
                    classes: a.className,
                    style: a.style.cssText
                })) : this.parsed.push({
                    array_index: this.parsed.length,
                    options_index: this.options_index,
                    empty: !0
                }), this.options_index += 1) : void 0
            }, a
        }(), a.select_to_array = function(b) {
            var c, d, e, f, g;
            for (d = new a, g = b.childNodes, e = 0, f = g.length; f > e; e++) c = g[e], d.add_node(c);
            return d.parsed
        }, this.SelectParser = a
    }.call(this),
    function() {
        var a, b;
        b = this, a = function() {
            function a(a, b) {
                this.form_field = a, this.options = null != b ? b : {}, this.set_default_values(), this.is_multiple = this.form_field.multiple, this.set_default_text(), this.setup(), this.set_up_html(), this.register_observers(), this.finish_setup()
            }
            return a.prototype.set_default_values = function() {
                var a = this;
                return this.click_test_action = function(b) {
                    return a.test_active_click(b)
                }, this.activate_action = function(b) {
                    return a.activate_field(b)
                }, this.active_field = !1, this.mouse_on_container = !1, this.results_showing = !1, this.result_highlighted = null, this.result_single_selected = null, this.allow_single_deselect = null != this.options.allow_single_deselect && null != this.form_field.options[0] && "" === this.form_field.options[0].text ? this.options.allow_single_deselect : !1, this.disable_search_threshold = this.options.disable_search_threshold || 0, this.disable_search = this.options.disable_search || !1, this.search_contains = this.options.search_contains || 1, this.choices = 0, this.single_backstroke_delete = this.options.single_backstroke_delete || !1, this.max_selected_options = this.options.max_selected_options || 1 / 0
            }, a.prototype.set_default_text = function() {
                return this.default_text = $(this.form_field).data("placeholder") ? $(this.form_field).data("placeholder") : this.is_multiple ? this.options.placeholder_text_multiple || this.options.placeholder_text || "Select Some Options" : this.options.placeholder_text_single || this.options.placeholder_text || "Select an Option", this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || "No results match"
            }, a.prototype.mouse_enter = function() {
                return this.mouse_on_container = !0
            }, a.prototype.mouse_leave = function() {
                return this.mouse_on_container = !1
            }, a.prototype.input_focus = function() {
                var a = this;
                if (this.is_multiple) {
                    if (!this.active_field) return setTimeout(function() {
                        return a.container_mousedown()
                    }, 50)
                } else if (!this.active_field) return this.activate_field()
            }, a.prototype.input_blur = function() {
                var a = this;
                return this.mouse_on_container ? void 0 : (this.active_field = !1, setTimeout(function() {
                    return a.blur_test()
                }, 100))
            }, a.prototype.result_add_option = function(a) {
                var b, c;
                return a.disabled ? "" : (a.dom_id = this.container_id + "_o_" + a.array_index, b = a.selected && this.is_multiple ? [] : ["active-result"], a.selected && b.push("result-selected"), null != a.group_array_index && b.push("group-option"), "" !== a.classes && b.push(a.classes), c = "" !== a.style.cssText ? ' style="' + a.style + '"' : "", '<li id="' + a.dom_id + '" class="' + b.join(" ") + '"' + c + ">" + a.html + "</li>")
            }, a.prototype.results_update_field = function() {
                return this.is_multiple || this.results_reset_cleanup(), this.result_clear_highlight(), this.result_single_selected = null, this.results_build()
            }, a.prototype.results_toggle = function() {
                return this.results_showing ? this.results_hide() : this.results_show()
            }, a.prototype.results_search = function() {
                return this.results_showing ? this.winnow_results() : this.results_show()
            }, a.prototype.keyup_checker = function(a) {
                var b, c;
                switch (b = null != (c = a.which) ? c : a.keyCode, this.search_field_scale(), b) {
                    case 8:
                        if (this.is_multiple && this.backstroke_length < 1 && this.choices > 0) return this.keydown_backstroke();
                        if (!this.pending_backstroke) return this.result_clear_highlight(), this.results_search();
                        break;
                    case 13:
                        if (a.preventDefault(), this.results_showing) return this.result_select(a);
                        break;
                    case 9:
                    case 38:
                    case 40:
                    case 16:
                    case 91:
                    case 17:
                        break;
                    default:
                        return this.results_search()
                }
            }, a.prototype.generate_field_id = function() {
                var a;
                return a = this.generate_random_id(), this.form_field.id = a, a
            }, a.prototype.generate_random_char = function() {
                var a, b, c;
                return a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", c = Math.floor(Math.random() * a.length), b = a.substring(c, c + 1)
            }, a
        }(), b.AbstractChosen = a
    }.call(this),
    function() {
        var a, b, c, d, e = Object.prototype.hasOwnProperty,
            f = function(a, b) {
                function c() {
                    this.constructor = a
                }
                for (var d in b) e.call(b, d) && (a[d] = b[d]);
                return c.prototype = b.prototype, a.prototype = new c, a.__super__ = b.prototype, a
            };
        d = this, a = jQuery, a.fn.extend({
            chosen: function(c) {
                return a.browser.msie && ("6.0" === a.browser.version || "7.0" === a.browser.version && 7 === document.documentMode) ? this : this.each(function() {
                    var d;
                    return d = a(this), d.hasClass("chzn-done") ? void 0 : d.data("chosen", new b(this, c))
                })
            }
        }), b = function(b) {
            function e() {
                e.__super__.constructor.apply(this, arguments)
            }
            return f(e, b), e.prototype.setup = function() {
                return this.form_field_jq = a(this.form_field), this.current_value = this.form_field_jq.val(), this.is_rtl = this.form_field_jq.hasClass("chzn-rtl")
            }, e.prototype.finish_setup = function() {
                return this.form_field_jq.addClass("chzn-done")
            }, e.prototype.set_up_html = function() {
                var b, d, e, f;
                return this.container_id = this.form_field.id.length ? this.form_field.id.replace(/[^\w]/g, "_") : this.generate_field_id(), this.container_id += "_chzn", this.f_width = this.form_field_jq.outerWidth(), b = a("<div />", {
                    id: this.container_id,
                    "class": "chzn-container" + (this.is_rtl ? " chzn-rtl" : ""),
                    style: "width: " + this.f_width + "px;"
                }), this.is_multiple ? b.html('<ul class="chzn-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="display:none;"><ul class="chzn-results"></ul></div>') : b.html('<a href="javascript:void(0)" class="chzn-single chzn-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chzn-drop" style="display:none"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>'), this.form_field_jq.hide().after(b), this.container = a("#" + this.container_id), this.container.addClass("chzn-container-" + (this.is_multiple ? "multi" : "single")), this.dropdown = this.container.find("div.chzn-drop").first(), d = this.container.height(), e = this.f_width - c(this.dropdown), this.dropdown.css({
                    width: e + "px",
                    top: d + "px"
                }), this.search_field = this.container.find("input").first(), this.search_results = this.container.find("ul.chzn-results").first(), this.search_field_scale(), this.search_no_results = this.container.find("li.no-results").first(), this.is_multiple ? (this.search_choices = this.container.find("ul.chzn-choices").first(), this.search_container = this.container.find("li.search-field").first()) : (this.search_container = this.container.find("div.chzn-search").first(), this.selected_item = this.container.find(".chzn-single").first(), f = e - c(this.search_container) - c(this.search_field), this.search_field.css({
                    width: f + "px"
                })), this.results_build(), this.set_tab_index(), this.form_field_jq.trigger("liszt:ready", {
                    chosen: this
                })
            }, e.prototype.register_observers = function() {
                var a = this;
                return this.container.mousedown(function(b) {
                    return a.container_mousedown(b)
                }), this.container.mouseup(function(b) {
                    return a.container_mouseup(b)
                }), this.container.mouseenter(function(b) {
                    return a.mouse_enter(b)
                }), this.container.mouseleave(function(b) {
                    return a.mouse_leave(b)
                }), this.search_results.mouseup(function(b) {
                    return a.search_results_mouseup(b)
                }), this.search_results.mouseover(function(b) {
                    return a.search_results_mouseover(b)
                }), this.search_results.mouseout(function(b) {
                    return a.search_results_mouseout(b)
                }), this.form_field_jq.bind("liszt:updated", function(b) {
                    return a.results_update_field(b)
                }), this.form_field_jq.bind("liszt:activate", function(b) {
                    return a.activate_field(b)
                }), this.form_field_jq.bind("liszt:open", function(b) {
                    return a.container_mousedown(b)
                }), this.search_field.blur(function(b) {
                    return a.input_blur(b)
                }), this.search_field.keyup(function(b) {
                    return a.keyup_checker(b)
                }), this.search_field.keydown(function(b) {
                    return a.keydown_checker(b)
                }), this.search_field.focus(function(b) {
                    return a.input_focus(b)
                }), this.is_multiple ? this.search_choices.click(function(b) {
                    return a.choices_click(b)
                }) : this.container.click(function(a) {
                    return a.preventDefault()
                })
            }, e.prototype.search_field_disabled = function() {
                return this.is_disabled = this.form_field_jq[0].disabled, this.is_disabled ? (this.container.addClass("chzn-disabled"), this.search_field[0].disabled = !0, this.is_multiple || this.selected_item.unbind("focus", this.activate_action), this.close_field()) : (this.container.removeClass("chzn-disabled"), this.search_field[0].disabled = !1, this.is_multiple ? void 0 : this.selected_item.bind("focus", this.activate_action))
            }, e.prototype.container_mousedown = function(b) {
                var c;
                return this.is_disabled ? void 0 : (c = null != b ? a(b.target).hasClass("search-choice-close") : !1, b && "mousedown" === b.type && !this.results_showing && b.stopPropagation(), this.pending_destroy_click || c ? this.pending_destroy_click = !1 : (this.active_field ? !this.is_multiple && b && (a(b.target)[0] === this.selected_item[0] || a(b.target).parents("a.chzn-single").length) && (b.preventDefault(), this.results_toggle()) : (this.is_multiple && this.search_field.val(""), a(document).click(this.click_test_action), this.results_show()), this.activate_field()))
            }, e.prototype.container_mouseup = function(a) {
                return "ABBR" !== a.target.nodeName || this.is_disabled ? void 0 : this.results_reset(a)
            }, e.prototype.blur_test = function() {
                return !this.active_field && this.container.hasClass("chzn-container-active") ? this.close_field() : void 0
            }, e.prototype.close_field = function() {
                return a(document).unbind("click", this.click_test_action), this.active_field = !1, this.results_hide(), this.container.removeClass("chzn-container-active"), this.winnow_results_clear(), this.clear_backstroke(), this.show_search_field_default(), this.search_field_scale()
            }, e.prototype.activate_field = function() {
                return this.container.addClass("chzn-container-active"), this.active_field = !0, this.search_field.val(this.search_field.val()), this.search_field.focus()
            }, e.prototype.test_active_click = function(b) {
                return a(b.target).parents("#" + this.container_id).length ? this.active_field = !0 : this.close_field()
            }, e.prototype.results_build = function() {
                var a, b, c, e, f;
                for (this.parsing = !0, this.results_data = d.SelectParser.select_to_array(this.form_field), this.is_multiple && this.choices > 0 ? (this.search_choices.find("li.search-choice").remove(), this.choices = 0) : this.is_multiple || (this.selected_item.addClass("chzn-default").find("span").html(this.default_text), this.disable_search || this.form_field.options.length <= this.disable_search_threshold ? this.container.addClass("chzn-container-single-nosearch") : this.container.removeClass("chzn-container-single-nosearch")), a = "", f = this.results_data, c = 0, e = f.length; e > c; c++) b = f[c], b.group ? a += this.result_add_group(b) : b.empty || (a += this.result_add_option(b), b.selected && this.is_multiple ? this.choice_build(b) : b.selected && !this.is_multiple && (this.selected_item.removeClass("chzn-default").find("span").html(this.default_text), this.allow_single_deselect && this.single_deselect_control_build()));
                return this.search_field_disabled(), this.show_search_field_default(), this.search_field_scale(), this.search_results.html(a), this.parsing = !1
            }, e.prototype.result_add_group = function(b) {
                return b.disabled ? "" : (b.dom_id = this.container_id + "_g_" + b.array_index, '<li id="' + b.dom_id + '" class="group-result">' + a("<div />").text(b.label).html() + "</li>")
            }, e.prototype.result_do_highlight = function(a) {
                var b, c, d, e, f;
                if (a.length) {
                    if (this.result_clear_highlight(), this.result_highlight = a, this.result_highlight.addClass("highlighted"), d = parseInt(this.search_results.css("maxHeight"), 10), f = this.search_results.scrollTop(), e = d + f, c = this.result_highlight.position().top + this.search_results.scrollTop(), b = c + this.result_highlight.outerHeight(), b >= e) return this.search_results.scrollTop(b - d > 0 ? b - d : 0);
                    if (f > c) return this.search_results.scrollTop(c)
                }
            }, e.prototype.result_clear_highlight = function() {
                return this.result_highlight && this.result_highlight.removeClass("highlighted"), this.result_highlight = null
            }, e.prototype.results_show = function() {
                var a;
                if (this.is_multiple) {
                    if (this.max_selected_options <= this.choices) return this.form_field_jq.trigger("liszt:maxselected", {
                        chosen: this
                    }), !1
                } else this.selected_item.addClass("chzn-single-with-drop"), this.result_single_selected && this.result_do_highlight(this.result_single_selected);
                return a = this.is_multiple ? this.container.height() : this.container.height() - 1, this.form_field_jq.trigger("liszt:showing_dropdown", {
                    chosen: this
                }), this.dropdown.css({
                    top: a + "px",
                    display: "block"
                }), this.results_showing = !0, this.search_field.focus(), this.search_field.val(this.search_field.val()), this.winnow_results()
            }, e.prototype.results_hide = function() {
                return this.is_multiple || this.selected_item.removeClass("chzn-single-with-drop"), this.result_clear_highlight(), this.form_field_jq.trigger("liszt:hiding_dropdown", {
                    chosen: this
                }), this.dropdown.css({
                    display: "none"
                }), this.results_showing = !1
            }, e.prototype.set_tab_index = function() {
                var a;
                return this.form_field_jq.attr("tabindex") ? (a = this.form_field_jq.attr("tabindex"), this.form_field_jq.attr("tabindex", -1), this.search_field.attr("tabindex", a)) : void 0
            }, e.prototype.show_search_field_default = function() {
                return this.is_multiple && this.choices < 1 && !this.active_field ? (this.search_field.val(this.default_text), this.search_field.addClass("default")) : (this.search_field.val(""), this.search_field.removeClass("default"))
            }, e.prototype.search_results_mouseup = function(b) {
                var c;
                return c = a(b.target).hasClass("active-result") ? a(b.target) : a(b.target).parents(".active-result").first(), c.length ? (this.result_highlight = c, this.result_select(b), this.search_field.focus()) : void 0
            }, e.prototype.search_results_mouseover = function(b) {
                var c;
                return c = a(b.target).hasClass("active-result") ? a(b.target) : a(b.target).parents(".active-result").first(), c ? this.result_do_highlight(c) : void 0
            }, e.prototype.search_results_mouseout = function(b) {
                return a(b.target).hasClass("active-result") ? this.result_clear_highlight() : void 0
            }, e.prototype.choices_click = function(b) {
                return b.preventDefault(), !this.active_field || a(b.target).hasClass("search-choice") || this.results_showing ? void 0 : this.results_show()
            }, e.prototype.choice_build = function(b) {
                var c, d, e, f = this;
                return this.is_multiple && this.max_selected_options <= this.choices ? (this.form_field_jq.trigger("liszt:maxselected", {
                    chosen: this
                }), !1) : (c = this.container_id + "_c_" + b.array_index, this.choices += 1, d = b.disabled ? '<li class="search-choice search-choice-disabled" id="' + c + '"><span>' + b.html + "</span></li>" : '<li class="search-choice" id="' + c + '"><span>' + b.html + '</span><a href="javascript:void(0)" class="search-choice-close" rel="' + b.array_index + '"></a></li>', this.search_container.before(d), e = a("#" + c).find("a").first(), e.click(function(a) {
                    return f.choice_destroy_link_click(a)
                }))
            }, e.prototype.choice_destroy_link_click = function(b) {
                return b.preventDefault(), this.is_disabled ? b.stopPropagation : (this.pending_destroy_click = !0, this.choice_destroy(a(b.target)))
            }, e.prototype.choice_destroy = function(a) {
                return this.result_deselect(a.attr("rel")) ? (this.choices -= 1, this.show_search_field_default(), this.is_multiple && this.choices > 0 && this.search_field.val().length < 1 && this.results_hide(), a.parents("li").first().remove()) : void 0
            }, e.prototype.results_reset = function() {
                return this.form_field.options[0].selected = !0, this.selected_item.find("span").html(this.default_text), this.is_multiple || this.selected_item.addClass("chzn-default"), this.show_search_field_default(), this.results_reset_cleanup(), this.form_field_jq.trigger("change"), this.active_field ? this.results_hide() : void 0
            }, e.prototype.results_reset_cleanup = function() {
                return this.current_value = this.form_field_jq.val(), this.selected_item.find("abbr").remove()
            }, e.prototype.result_select = function(a) {
                var b, c, d, e;
                return this.result_highlight ? (b = this.result_highlight, c = b.attr("id"), this.result_clear_highlight(), this.is_multiple ? this.result_deactivate(b) : (this.search_results.find(".result-selected").removeClass("result-selected"), this.result_single_selected = b), b.addClass("result-selected"), e = c.substr(c.lastIndexOf("_") + 1), d = this.results_data[e], d.selected = !0, this.form_field.options[d.options_index].selected = !0, this.is_multiple ? this.choice_build(d) : this.allow_single_deselect && this.single_deselect_control_build(), (!a.metaKey || !this.is_multiple) && this.results_hide(), this.search_field.val(""), (this.is_multiple || this.form_field_jq.val() !== this.current_value) && this.form_field_jq.trigger("change", {
                    selected: this.form_field.options[d.options_index].value
                }), this.current_value = this.form_field_jq.val(), this.search_field_scale()) : void 0
            }, e.prototype.result_activate = function(a) {
                return a.addClass("active-result")
            }, e.prototype.result_deactivate = function(a) {
                return a.removeClass("active-result")
            }, e.prototype.result_deselect = function(b) {
                var c, d;
                return d = this.results_data[b], this.form_field.options[d.options_index].disabled ? !1 : (d.selected = !1, this.form_field.options[d.options_index].selected = !1, c = a("#" + this.container_id + "_o_" + b), c.removeClass("result-selected").addClass("active-result").show(), this.result_clear_highlight(), this.winnow_results(), this.form_field_jq.trigger("change", {
                    deselected: this.form_field.options[d.options_index].value
                }), this.search_field_scale(), !0)
            }, e.prototype.single_deselect_control_build = function() {
                return this.allow_single_deselect && this.selected_item.find("abbr").length < 1 ? this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>') : void 0
            }, e.prototype.winnow_results = function() {
                var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s;
                for (this.no_results_clear(), j = 0, k = this.search_field.val() === this.default_text ? "" : a("<div/>").text(a.trim(this.search_field.val())).html(), g = this.search_contains ? "" : "^", f = new RegExp(g + k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i"), n = new RegExp(k.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), "i"), s = this.results_data, o = 0, q = s.length; q > o; o++)
                    if (c = s[o], !c.disabled && !c.empty)
                        if (c.group) a("#" + c.dom_id).css("display", "none");
                        else if (!this.is_multiple || !c.selected) {
                    if (b = !1, i = c.dom_id, h = a("#" + i), f.test(c.html)) b = !0, j += 1;
                    else if ((c.html.indexOf(" ") >= 0 || 0 === c.html.indexOf("[")) && (e = c.html.replace(/\[|\]/g, "").split(" "), e.length))
                        for (p = 0, r = e.length; r > p; p++) d = e[p], f.test(d) && (b = !0, j += 1);
                    b ? (k.length ? (l = c.html.search(n), m = c.html.substr(0, l + k.length) + "</em>" + c.html.substr(l + k.length), m = m.substr(0, l) + "<em>" + m.substr(l)) : m = c.html, h.html(m), this.result_activate(h), null != c.group_array_index && a("#" + this.results_data[c.group_array_index].dom_id).css("display", "list-item")) : (this.result_highlight && i === this.result_highlight.attr("id") && this.result_clear_highlight(), this.result_deactivate(h))
                }
                return 1 > j && k.length ? this.no_results(k) : this.winnow_results_set_highlight()
            }, e.prototype.winnow_results_clear = function() {
                var b, c, d, e, f;
                for (this.search_field.val(""), c = this.search_results.find("li"), f = [], d = 0, e = c.length; e > d; d++) b = c[d], b = a(b), b.hasClass("group-result") ? f.push(b.css("display", "auto")) : this.is_multiple && b.hasClass("result-selected") ? f.push(void 0) : f.push(this.result_activate(b));
                return f
            }, e.prototype.winnow_results_set_highlight = function() {
                var a, b;
                return this.result_highlight || (b = this.is_multiple ? [] : this.search_results.find(".result-selected.active-result"), a = b.length ? b.first() : this.search_results.find(".active-result").first(), null == a) ? void 0 : this.result_do_highlight(a)
            }, e.prototype.no_results = function(b) {
                var c;
                return c = a('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>'), c.find("span").first().html(b), this.search_results.append(c)
            }, e.prototype.no_results_clear = function() {
                return this.search_results.find(".no-results").remove()
            }, e.prototype.keydown_arrow = function() {
                var b, c;
                return this.result_highlight ? this.results_showing && (c = this.result_highlight.nextAll("li.active-result").first(), c && this.result_do_highlight(c)) : (b = this.search_results.find("li.active-result").first(), b && this.result_do_highlight(a(b))), this.results_showing ? void 0 : this.results_show()
            }, e.prototype.keyup_arrow = function() {
                var a;
                return this.results_showing || this.is_multiple ? this.result_highlight ? (a = this.result_highlight.prevAll("li.active-result"), a.length ? this.result_do_highlight(a.first()) : (this.choices > 0 && this.results_hide(), this.result_clear_highlight())) : void 0 : this.results_show()
            }, e.prototype.keydown_backstroke = function() {
                var a;
                return this.pending_backstroke ? (this.choice_destroy(this.pending_backstroke.find("a").first()), this.clear_backstroke()) : (a = this.search_container.siblings("li.search-choice").last(), a.length && !a.hasClass("search-choice-disabled") ? (this.pending_backstroke = a, this.single_backstroke_delete ? this.keydown_backstroke() : this.pending_backstroke.addClass("search-choice-focus")) : void 0)
            }, e.prototype.clear_backstroke = function() {
                return this.pending_backstroke && this.pending_backstroke.removeClass("search-choice-focus"), this.pending_backstroke = null
            }, e.prototype.keydown_checker = function(a) {
                var b, c;
                switch (b = null != (c = a.which) ? c : a.keyCode, this.search_field_scale(), 8 !== b && this.pending_backstroke && this.clear_backstroke(), b) {
                    case 8:
                        this.backstroke_length = this.search_field.val().length;
                        break;
                    case 9:
                        this.results_showing && !this.is_multiple && this.result_select(a), this.mouse_on_container = !1;
                        break;
                    case 13:
                        a.preventDefault();
                        break;
                    case 38:
                        a.preventDefault(), this.keyup_arrow();
                        break;
                    case 40:
                        this.keydown_arrow()
                }
            }, e.prototype.search_field_scale = function() {
                var b, c, d, e, f, g, h, i, j;
                if (this.is_multiple) {
                    for (d = 0, h = 0, f = "position:absolute; left: -1000px; top: -1000px; display:none;", g = ["font-size", "font-style", "font-weight", "font-family", "line-height", "text-transform", "letter-spacing"], i = 0, j = g.length; j > i; i++) e = g[i], f += e + ":" + this.search_field.css(e) + ";";
                    return c = a("<div />", {
                        style: f
                    }), c.text(this.search_field.val()), a("body").append(c), h = c.width() + 25, c.remove(), h > this.f_width - 10 && (h = this.f_width - 10), this.search_field.css({
                        width: h + "px"
                    }), b = this.container.height(), this.dropdown.css({
                        top: b + "px"
                    })
                }
            }, e.prototype.generate_random_id = function() {
                var b;
                for (b = "sel" + this.generate_random_char() + this.generate_random_char() + this.generate_random_char(); a("#" + b).length > 0;) b += this.generate_random_char();
                return b
            }, e
        }(AbstractChosen), c = function(a) {
            var b;
            return b = a.outerWidth() - a.width()
        }, d.get_side_border_padding = c
    }.call(this),
    function() {
        var a = this,
            b = a._,
            c = {},
            d = Array.prototype,
            e = Object.prototype,
            f = Function.prototype,
            g = d.push,
            h = d.slice,
            i = d.concat,
            j = e.toString,
            k = e.hasOwnProperty,
            l = d.forEach,
            m = d.map,
            n = d.reduce,
            o = d.reduceRight,
            p = d.filter,
            q = d.every,
            r = d.some,
            s = d.indexOf,
            t = d.lastIndexOf,
            u = Array.isArray,
            v = Object.keys,
            w = f.bind,
            x = function(a) {
                return a instanceof x ? a : this instanceof x ? (this._wrapped = a, void 0) : new x(a)
            };
        "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = x), exports._ = x) : a._ = x, x.VERSION = "1.6.0";
        var y = x.each = x.forEach = function(a, b, d) {
            if (null == a) return a;
            if (l && a.forEach === l) a.forEach(b, d);
            else if (a.length === +a.length) {
                for (var e = 0, f = a.length; f > e; e++)
                    if (b.call(d, a[e], e, a) === c) return
            } else
                for (var g = x.keys(a), e = 0, f = g.length; f > e; e++)
                    if (b.call(d, a[g[e]], g[e], a) === c) return; return a
        };
        x.map = x.collect = function(a, b, c) {
            var d = [];
            return null == a ? d : m && a.map === m ? a.map(b, c) : (y(a, function(a, e, f) {
                d.push(b.call(c, a, e, f))
            }), d)
        };
        var z = "Reduce of empty array with no initial value";
        x.reduce = x.foldl = x.inject = function(a, b, c, d) {
            var e = arguments.length > 2;
            if (null == a && (a = []), n && a.reduce === n) return d && (b = x.bind(b, d)), e ? a.reduce(b, c) : a.reduce(b);
            if (y(a, function(a, f, g) {
                    e ? c = b.call(d, c, a, f, g) : (c = a, e = !0)
                }), !e) throw new TypeError(z);
            return c
        }, x.reduceRight = x.foldr = function(a, b, c, d) {
            var e = arguments.length > 2;
            if (null == a && (a = []), o && a.reduceRight === o) return d && (b = x.bind(b, d)), e ? a.reduceRight(b, c) : a.reduceRight(b);
            var f = a.length;
            if (f !== +f) {
                var g = x.keys(a);
                f = g.length
            }
            if (y(a, function(h, i, j) {
                    i = g ? g[--f] : --f, e ? c = b.call(d, c, a[i], i, j) : (c = a[i], e = !0)
                }), !e) throw new TypeError(z);
            return c
        }, x.find = x.detect = function(a, b, c) {
            var d;
            return A(a, function(a, e, f) {
                return b.call(c, a, e, f) ? (d = a, !0) : void 0
            }), d
        }, x.filter = x.select = function(a, b, c) {
            var d = [];
            return null == a ? d : p && a.filter === p ? a.filter(b, c) : (y(a, function(a, e, f) {
                b.call(c, a, e, f) && d.push(a)
            }), d)
        }, x.reject = function(a, b, c) {
            return x.filter(a, function(a, d, e) {
                return !b.call(c, a, d, e)
            }, c)
        }, x.every = x.all = function(a, b, d) {
            b || (b = x.identity);
            var e = !0;
            return null == a ? e : q && a.every === q ? a.every(b, d) : (y(a, function(a, f, g) {
                return (e = e && b.call(d, a, f, g)) ? void 0 : c
            }), !!e)
        };
        var A = x.some = x.any = function(a, b, d) {
            b || (b = x.identity);
            var e = !1;
            return null == a ? e : r && a.some === r ? a.some(b, d) : (y(a, function(a, f, g) {
                return e || (e = b.call(d, a, f, g)) ? c : void 0
            }), !!e)
        };
        x.contains = x.include = function(a, b) {
            return null == a ? !1 : s && a.indexOf === s ? -1 != a.indexOf(b) : A(a, function(a) {
                return a === b
            })
        }, x.invoke = function(a, b) {
            var c = h.call(arguments, 2),
                d = x.isFunction(b);
            return x.map(a, function(a) {
                return (d ? b : a[b]).apply(a, c)
            })
        }, x.pluck = function(a, b) {
            return x.map(a, x.property(b))
        }, x.where = function(a, b) {
            return x.filter(a, x.matches(b))
        }, x.findWhere = function(a, b) {
            return x.find(a, x.matches(b))
        }, x.max = function(a, b, c) {
            if (!b && x.isArray(a) && a[0] === +a[0] && a.length < 65535) return Math.max.apply(Math, a);
            var d = -1 / 0,
                e = -1 / 0;
            return y(a, function(a, f, g) {
                var h = b ? b.call(c, a, f, g) : a;
                h > e && (d = a, e = h)
            }), d
        }, x.min = function(a, b, c) {
            if (!b && x.isArray(a) && a[0] === +a[0] && a.length < 65535) return Math.min.apply(Math, a);
            var d = 1 / 0,
                e = 1 / 0;
            return y(a, function(a, f, g) {
                var h = b ? b.call(c, a, f, g) : a;
                e > h && (d = a, e = h)
            }), d
        }, x.shuffle = function(a) {
            var b, c = 0,
                d = [];
            return y(a, function(a) {
                b = x.random(c++), d[c - 1] = d[b], d[b] = a
            }), d
        }, x.sample = function(a, b, c) {
            return null == b || c ? (a.length !== +a.length && (a = x.values(a)), a[x.random(a.length - 1)]) : x.shuffle(a).slice(0, Math.max(0, b))
        };
        var B = function(a) {
            return null == a ? x.identity : x.isFunction(a) ? a : x.property(a)
        };
        x.sortBy = function(a, b, c) {
            return b = B(b), x.pluck(x.map(a, function(a, d, e) {
                return {
                    value: a,
                    index: d,
                    criteria: b.call(c, a, d, e)
                }
            }).sort(function(a, b) {
                var c = a.criteria,
                    d = b.criteria;
                if (c !== d) {
                    if (c > d || void 0 === c) return 1;
                    if (d > c || void 0 === d) return -1
                }
                return a.index - b.index
            }), "value")
        };
        var C = function(a) {
            return function(b, c, d) {
                var e = {};
                return c = B(c), y(b, function(f, g) {
                    var h = c.call(d, f, g, b);
                    a(e, h, f)
                }), e
            }
        };
        x.groupBy = C(function(a, b, c) {
            x.has(a, b) ? a[b].push(c) : a[b] = [c]
        }), x.indexBy = C(function(a, b, c) {
            a[b] = c
        }), x.countBy = C(function(a, b) {
            x.has(a, b) ? a[b] ++ : a[b] = 1
        }), x.sortedIndex = function(a, b, c, d) {
            c = B(c);
            for (var e = c.call(d, b), f = 0, g = a.length; g > f;) {
                var h = f + g >>> 1;
                c.call(d, a[h]) < e ? f = h + 1 : g = h
            }
            return f
        }, x.toArray = function(a) {
            return a ? x.isArray(a) ? h.call(a) : a.length === +a.length ? x.map(a, x.identity) : x.values(a) : []
        }, x.size = function(a) {
            return null == a ? 0 : a.length === +a.length ? a.length : x.keys(a).length
        }, x.first = x.head = x.take = function(a, b, c) {
            return null == a ? void 0 : null == b || c ? a[0] : 0 > b ? [] : h.call(a, 0, b)
        }, x.initial = function(a, b, c) {
            return h.call(a, 0, a.length - (null == b || c ? 1 : b))
        }, x.last = function(a, b, c) {
            return null == a ? void 0 : null == b || c ? a[a.length - 1] : h.call(a, Math.max(a.length - b, 0))
        }, x.rest = x.tail = x.drop = function(a, b, c) {
            return h.call(a, null == b || c ? 1 : b)
        }, x.compact = function(a) {
            return x.filter(a, x.identity)
        };
        var D = function(a, b, c) {
            return b && x.every(a, x.isArray) ? i.apply(c, a) : (y(a, function(a) {
                x.isArray(a) || x.isArguments(a) ? b ? g.apply(c, a) : D(a, b, c) : c.push(a)
            }), c)
        };
        x.flatten = function(a, b) {
            return D(a, b, [])
        }, x.without = function(a) {
            return x.difference(a, h.call(arguments, 1))
        }, x.partition = function(a, b, c) {
            b = B(b);
            var d = [],
                e = [];
            return y(a, function(a) {
                (b.call(c, a) ? d : e).push(a)
            }), [d, e]
        }, x.uniq = x.unique = function(a, b, c, d) {
            x.isFunction(b) && (d = c, c = b, b = !1);
            var e = c ? x.map(a, c, d) : a,
                f = [],
                g = [];
            return y(e, function(c, d) {
                (b ? d && g[g.length - 1] === c : x.contains(g, c)) || (g.push(c), f.push(a[d]))
            }), f
        }, x.union = function() {
            return x.uniq(x.flatten(arguments, !0))
        }, x.intersection = function(a) {
            var b = h.call(arguments, 1);
            return x.filter(x.uniq(a), function(a) {
                return x.every(b, function(b) {
                    return x.contains(b, a)
                })
            })
        }, x.difference = function(a) {
            var b = i.apply(d, h.call(arguments, 1));
            return x.filter(a, function(a) {
                return !x.contains(b, a)
            })
        }, x.zip = function() {
            for (var a = x.max(x.pluck(arguments, "length").concat(0)), b = new Array(a), c = 0; a > c; c++) b[c] = x.pluck(arguments, "" + c);
            return b
        }, x.object = function(a, b) {
            if (null == a) return {};
            for (var c = {}, d = 0, e = a.length; e > d; d++) b ? c[a[d]] = b[d] : c[a[d][0]] = a[d][1];
            return c
        }, x.indexOf = function(a, b, c) {
            if (null == a) return -1;
            var d = 0,
                e = a.length;
            if (c) {
                if ("number" != typeof c) return d = x.sortedIndex(a, b), a[d] === b ? d : -1;
                d = 0 > c ? Math.max(0, e + c) : c
            }
            if (s && a.indexOf === s) return a.indexOf(b, c);
            for (; e > d; d++)
                if (a[d] === b) return d;
            return -1
        }, x.lastIndexOf = function(a, b, c) {
            if (null == a) return -1;
            var d = null != c;
            if (t && a.lastIndexOf === t) return d ? a.lastIndexOf(b, c) : a.lastIndexOf(b);
            for (var e = d ? c : a.length; e--;)
                if (a[e] === b) return e;
            return -1
        }, x.range = function(a, b, c) {
            arguments.length <= 1 && (b = a || 0, a = 0), c = arguments[2] || 1;
            for (var d = Math.max(Math.ceil((b - a) / c), 0), e = 0, f = new Array(d); d > e;) f[e++] = a, a += c;
            return f
        };
        var E = function() {};
        x.bind = function(a, b) {
            var c, d;
            if (w && a.bind === w) return w.apply(a, h.call(arguments, 1));
            if (!x.isFunction(a)) throw new TypeError;
            return c = h.call(arguments, 2), d = function() {
                if (!(this instanceof d)) return a.apply(b, c.concat(h.call(arguments)));
                E.prototype = a.prototype;
                var e = new E;
                E.prototype = null;
                var f = a.apply(e, c.concat(h.call(arguments)));
                return Object(f) === f ? f : e
            }
        }, x.partial = function(a) {
            var b = h.call(arguments, 1);
            return function() {
                for (var c = 0, d = b.slice(), e = 0, f = d.length; f > e; e++) d[e] === x && (d[e] = arguments[c++]);
                for (; c < arguments.length;) d.push(arguments[c++]);
                return a.apply(this, d)
            }
        }, x.bindAll = function(a) {
            var b = h.call(arguments, 1);
            if (0 === b.length) throw new Error("bindAll must be passed function names");
            return y(b, function(b) {
                a[b] = x.bind(a[b], a)
            }), a
        }, x.memoize = function(a, b) {
            var c = {};
            return b || (b = x.identity),
                function() {
                    var d = b.apply(this, arguments);
                    return x.has(c, d) ? c[d] : c[d] = a.apply(this, arguments)
                }
        }, x.delay = function(a, b) {
            var c = h.call(arguments, 2);
            return setTimeout(function() {
                return a.apply(null, c)
            }, b)
        }, x.defer = function(a) {
            return x.delay.apply(x, [a, 1].concat(h.call(arguments, 1)))
        }, x.throttle = function(a, b, c) {
            var d, e, f, g = null,
                h = 0;
            c || (c = {});
            var i = function() {
                h = c.leading === !1 ? 0 : x.now(), g = null, f = a.apply(d, e), d = e = null
            };
            return function() {
                var j = x.now();
                h || c.leading !== !1 || (h = j);
                var k = b - (j - h);
                return d = this, e = arguments, 0 >= k ? (clearTimeout(g), g = null, h = j, f = a.apply(d, e), d = e = null) : g || c.trailing === !1 || (g = setTimeout(i, k)), f
            }
        }, x.debounce = function(a, b, c) {
            var d, e, f, g, h, i = function() {
                var j = x.now() - g;
                b > j ? d = setTimeout(i, b - j) : (d = null, c || (h = a.apply(f, e), f = e = null))
            };
            return function() {
                f = this, e = arguments, g = x.now();
                var j = c && !d;
                return d || (d = setTimeout(i, b)), j && (h = a.apply(f, e), f = e = null), h
            }
        }, x.once = function(a) {
            var b, c = !1;
            return function() {
                return c ? b : (c = !0, b = a.apply(this, arguments), a = null, b)
            }
        }, x.wrap = function(a, b) {
            return x.partial(b, a)
        }, x.compose = function() {
            var a = arguments;
            return function() {
                for (var b = arguments, c = a.length - 1; c >= 0; c--) b = [a[c].apply(this, b)];
                return b[0]
            }
        }, x.after = function(a, b) {
            return function() {
                return --a < 1 ? b.apply(this, arguments) : void 0
            }
        }, x.keys = function(a) {
            if (!x.isObject(a)) return [];
            if (v) return v(a);
            var b = [];
            for (var c in a) x.has(a, c) && b.push(c);
            return b
        }, x.values = function(a) {
            for (var b = x.keys(a), c = b.length, d = new Array(c), e = 0; c > e; e++) d[e] = a[b[e]];
            return d
        }, x.pairs = function(a) {
            for (var b = x.keys(a), c = b.length, d = new Array(c), e = 0; c > e; e++) d[e] = [b[e], a[b[e]]];
            return d
        }, x.invert = function(a) {
            for (var b = {}, c = x.keys(a), d = 0, e = c.length; e > d; d++) b[a[c[d]]] = c[d];
            return b
        }, x.functions = x.methods = function(a) {
            var b = [];
            for (var c in a) x.isFunction(a[c]) && b.push(c);
            return b.sort()
        }, x.extend = function(a) {
            return y(h.call(arguments, 1), function(b) {
                if (b)
                    for (var c in b) a[c] = b[c]
            }), a
        }, x.pick = function(a) {
            var b = {},
                c = i.apply(d, h.call(arguments, 1));
            return y(c, function(c) {
                c in a && (b[c] = a[c])
            }), b
        }, x.omit = function(a) {
            var b = {},
                c = i.apply(d, h.call(arguments, 1));
            for (var e in a) x.contains(c, e) || (b[e] = a[e]);
            return b
        }, x.defaults = function(a) {
            return y(h.call(arguments, 1), function(b) {
                if (b)
                    for (var c in b) void 0 === a[c] && (a[c] = b[c])
            }), a
        }, x.clone = function(a) {
            return x.isObject(a) ? x.isArray(a) ? a.slice() : x.extend({}, a) : a
        }, x.tap = function(a, b) {
            return b(a), a
        };
        var F = function(a, b, c, d) {
            if (a === b) return 0 !== a || 1 / a == 1 / b;
            if (null == a || null == b) return a === b;
            a instanceof x && (a = a._wrapped), b instanceof x && (b = b._wrapped);
            var e = j.call(a);
            if (e != j.call(b)) return !1;
            switch (e) {
                case "[object String]":
                    return a == String(b);
                case "[object Number]":
                    return a != +a ? b != +b : 0 == a ? 1 / a == 1 / b : a == +b;
                case "[object Date]":
                case "[object Boolean]":
                    return +a == +b;
                case "[object RegExp]":
                    return a.source == b.source && a.global == b.global && a.multiline == b.multiline && a.ignoreCase == b.ignoreCase
            }
            if ("object" != typeof a || "object" != typeof b) return !1;
            for (var f = c.length; f--;)
                if (c[f] == a) return d[f] == b;
            var g = a.constructor,
                h = b.constructor;
            if (g !== h && !(x.isFunction(g) && g instanceof g && x.isFunction(h) && h instanceof h) && "constructor" in a && "constructor" in b) return !1;
            c.push(a), d.push(b);
            var i = 0,
                k = !0;
            if ("[object Array]" == e) {
                if (i = a.length, k = i == b.length)
                    for (; i-- && (k = F(a[i], b[i], c, d)););
            } else {
                for (var l in a)
                    if (x.has(a, l) && (i++, !(k = x.has(b, l) && F(a[l], b[l], c, d)))) break;
                if (k) {
                    for (l in b)
                        if (x.has(b, l) && !i--) break;
                    k = !i
                }
            }
            return c.pop(), d.pop(), k
        };
        x.isEqual = function(a, b) {
            return F(a, b, [], [])
        }, x.isEmpty = function(a) {
            if (null == a) return !0;
            if (x.isArray(a) || x.isString(a)) return 0 === a.length;
            for (var b in a)
                if (x.has(a, b)) return !1;
            return !0
        }, x.isElement = function(a) {
            return !(!a || 1 !== a.nodeType)
        }, x.isArray = u || function(a) {
            return "[object Array]" == j.call(a)
        }, x.isObject = function(a) {
            return a === Object(a)
        }, y(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function(a) {
            x["is" + a] = function(b) {
                return j.call(b) == "[object " + a + "]"
            }
        }), x.isArguments(arguments) || (x.isArguments = function(a) {
            return !(!a || !x.has(a, "callee"))
        }), "function" != typeof /./ && (x.isFunction = function(a) {
            return "function" == typeof a
        }), x.isFinite = function(a) {
            return isFinite(a) && !isNaN(parseFloat(a))
        }, x.isNaN = function(a) {
            return x.isNumber(a) && a != +a
        }, x.isBoolean = function(a) {
            return a === !0 || a === !1 || "[object Boolean]" == j.call(a)
        }, x.isNull = function(a) {
            return null === a
        }, x.isUndefined = function(a) {
            return void 0 === a
        }, x.has = function(a, b) {
            return k.call(a, b)
        }, x.noConflict = function() {
            return a._ = b, this
        }, x.identity = function(a) {
            return a
        }, x.constant = function(a) {
            return function() {
                return a
            }
        }, x.property = function(a) {
            return function(b) {
                return b[a]
            }
        }, x.matches = function(a) {
            return function(b) {
                if (b === a) return !0;
                for (var c in a)
                    if (a[c] !== b[c]) return !1;
                return !0
            }
        }, x.times = function(a, b, c) {
            for (var d = Array(Math.max(0, a)), e = 0; a > e; e++) d[e] = b.call(c, e);
            return d
        }, x.random = function(a, b) {
            return null == b && (b = a, a = 0), a + Math.floor(Math.random() * (b - a + 1))
        }, x.now = Date.now || function() {
            return (new Date).getTime()
        };
        var G = {
            escape: {
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#x27;"
            }
        };
        G.unescape = x.invert(G.escape);
        var H = {
            escape: new RegExp("[" + x.keys(G.escape).join("") + "]", "g"),
            unescape: new RegExp("(" + x.keys(G.unescape).join("|") + ")", "g")
        };
        x.each(["escape", "unescape"], function(a) {
            x[a] = function(b) {
                return null == b ? "" : ("" + b).replace(H[a], function(b) {
                    return G[a][b]
                })
            }
        }), x.result = function(a, b) {
            if (null == a) return void 0;
            var c = a[b];
            return x.isFunction(c) ? c.call(a) : c
        }, x.mixin = function(a) {
            y(x.functions(a), function(b) {
                var c = x[b] = a[b];
                x.prototype[b] = function() {
                    var a = [this._wrapped];
                    return g.apply(a, arguments), M.call(this, c.apply(x, a))
                }
            })
        };
        var I = 0;
        x.uniqueId = function(a) {
            var b = ++I + "";
            return a ? a + b : b
        }, x.templateSettings = {
            evaluate: /<%([\s\S]+?)%>/g,
            interpolate: /<%=([\s\S]+?)%>/g,
            escape: /<%-([\s\S]+?)%>/g
        };
        var J = /(.)^/,
            K = {
                "'": "'",
                "\\": "\\",
                "\r": "r",
                "\n": "n",
                "    ": "t",
                "\u2028": "u2028",
                "\u2029": "u2029"
            },
            L = /\\|'|\r|\n|\t|\u2028|\u2029/g;
        x.template = function(a, b, c) {
            var d;
            c = x.defaults({}, c, x.templateSettings);
            var e = new RegExp([(c.escape || J).source, (c.interpolate || J).source, (c.evaluate || J).source].join("|") + "|$", "g"),
                f = 0,
                g = "__p+='";
            a.replace(e, function(b, c, d, e, h) {
                return g += a.slice(f, h).replace(L, function(a) {
                    return "\\" + K[a]
                }), c && (g += "'+\n((__t=(" + c + "))==null?'':_.escape(__t))+\n'"), d && (g += "'+\n((__t=(" + d + "))==null?'':__t)+\n'"), e && (g += "';\n" + e + "\n__p+='"), f = h + b.length, b
            }), g += "';\n", c.variable || (g = "with(obj||{}){\n" + g + "}\n"), g = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + g + "return __p;\n";
            try {
                d = new Function(c.variable || "obj", "_", g)
            } catch (h) {
                throw h.source = g, h
            }
            if (b) return d(b, x);
            var i = function(a) {
                return d.call(this, a, x)
            };
            return i.source = "function(" + (c.variable || "obj") + "){\n" + g + "}", i
        }, x.chain = function(a) {
            return x(a).chain()
        };
        var M = function(a) {
            return this._chain ? x(a).chain() : a
        };
        x.mixin(x), y(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(a) {
            var b = d[a];
            x.prototype[a] = function() {
                var c = this._wrapped;
                return b.apply(c, arguments), "shift" != a && "splice" != a || 0 !== c.length || delete c[0], M.call(this, c)
            }
        }), y(["concat", "join", "slice"], function(a) {
            var b = d[a];
            x.prototype[a] = function() {
                return M.call(this, b.apply(this._wrapped, arguments))
            }
        }), x.extend(x.prototype, {
            chain: function() {
                return this._chain = !0, this
            },
            value: function() {
                return this._wrapped
            }
        }), "function" == typeof define && define.amd && define("underscore", [], function() {
            return x
        })
    }.call(this);
var Handlebars = function() {
    var a = function() {
            "use strict";

            function a(a) {
                this.string = a
            }
            var b;
            return a.prototype.toString = function() {
                return "" + this.string
            }, b = a
        }(),
        b = function(a) {
            "use strict";

            function b(a) {
                return h[a] || "&amp;"
            }

            function c(a, b) {
                for (var c in b) Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c])
            }

            function d(a) {
                return a instanceof g ? a.toString() : a || 0 === a ? (a = "" + a, j.test(a) ? a.replace(i, b) : a) : ""
            }

            function e(a) {
                return a || 0 === a ? m(a) && 0 === a.length ? !0 : !1 : !0
            }
            var f = {},
                g = a,
                h = {
                    "&": "&amp;",
                    "<": "&lt;",
                    ">": "&gt;",
                    '"': "&quot;",
                    "'": "&#x27;",
                    "`": "&#x60;"
                },
                i = /[&<>"'`]/g,
                j = /[&<>"'`]/;
            f.extend = c;
            var k = Object.prototype.toString;
            f.toString = k;
            var l = function(a) {
                return "function" == typeof a
            };
            l(/x/) && (l = function(a) {
                return "function" == typeof a && "[object Function]" === k.call(a)
            });
            var l;
            f.isFunction = l;
            var m = Array.isArray || function(a) {
                return a && "object" == typeof a ? "[object Array]" === k.call(a) : !1
            };
            return f.isArray = m, f.escapeExpression = d, f.isEmpty = e, f
        }(a),
        c = function() {
            "use strict";

            function a(a, b) {
                var d;
                b && b.firstLine && (d = b.firstLine, a += " - " + d + ":" + b.firstColumn);
                for (var e = Error.prototype.constructor.call(this, a), f = 0; f < c.length; f++) this[c[f]] = e[c[f]];
                d && (this.lineNumber = d, this.column = b.firstColumn)
            }
            var b, c = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"];
            return a.prototype = new Error, b = a
        }(),
        d = function(a, b) {
            "use strict";

            function c(a, b) {
                this.helpers = a || {}, this.partials = b || {}, d(this)
            }

            function d(a) {
                a.registerHelper("helperMissing", function(a) {
                    if (2 === arguments.length) return void 0;
                    throw new h("Missing helper: '" + a + "'")
                }), a.registerHelper("blockHelperMissing", function(b, c) {
                    var d = c.inverse || function() {},
                        e = c.fn;
                    return m(b) && (b = b.call(this)), b === !0 ? e(this) : b === !1 || null == b ? d(this) : l(b) ? b.length > 0 ? a.helpers.each(b, c) : d(this) : e(b)
                }), a.registerHelper("each", function(a, b) {
                    var c, d = b.fn,
                        e = b.inverse,
                        f = 0,
                        g = "";
                    if (m(a) && (a = a.call(this)), b.data && (c = q(b.data)), a && "object" == typeof a)
                        if (l(a))
                            for (var h = a.length; h > f; f++) c && (c.index = f, c.first = 0 === f, c.last = f === a.length - 1), g += d(a[f], {
                                data: c
                            });
                        else
                            for (var i in a) a.hasOwnProperty(i) && (c && (c.key = i, c.index = f, c.first = 0 === f), g += d(a[i], {
                                data: c
                            }), f++);
                    return 0 === f && (g = e(this)), g
                }), a.registerHelper("if", function(a, b) {
                    return m(a) && (a = a.call(this)), !b.hash.includeZero && !a || g.isEmpty(a) ? b.inverse(this) : b.fn(this)
                }), a.registerHelper("unless", function(b, c) {
                    return a.helpers["if"].call(this, b, {
                        fn: c.inverse,
                        inverse: c.fn,
                        hash: c.hash
                    })
                }), a.registerHelper("with", function(a, b) {
                    return m(a) && (a = a.call(this)), g.isEmpty(a) ? void 0 : b.fn(a)
                }), a.registerHelper("log", function(b, c) {
                    var d = c.data && null != c.data.level ? parseInt(c.data.level, 10) : 1;
                    a.log(d, b)
                })
            }

            function e(a, b) {
                p.log(a, b)
            }
            var f = {},
                g = a,
                h = b,
                i = "1.3.0";
            f.VERSION = i;
            var j = 4;
            f.COMPILER_REVISION = j;
            var k = {
                1: "<= 1.0.rc.2",
                2: "== 1.0.0-rc.3",
                3: "== 1.0.0-rc.4",
                4: ">= 1.0.0"
            };
            f.REVISION_CHANGES = k;
            var l = g.isArray,
                m = g.isFunction,
                n = g.toString,
                o = "[object Object]";
            f.HandlebarsEnvironment = c, c.prototype = {
                constructor: c,
                logger: p,
                log: e,
                registerHelper: function(a, b, c) {
                    if (n.call(a) === o) {
                        if (c || b) throw new h("Arg not supported with multiple helpers");
                        g.extend(this.helpers, a)
                    } else c && (b.not = c), this.helpers[a] = b
                },
                registerPartial: function(a, b) {
                    n.call(a) === o ? g.extend(this.partials, a) : this.partials[a] = b
                }
            };
            var p = {
                methodMap: {
                    0: "debug",
                    1: "info",
                    2: "warn",
                    3: "error"
                },
                DEBUG: 0,
                INFO: 1,
                WARN: 2,
                ERROR: 3,
                level: 3,
                log: function(a, b) {
                    if (p.level <= a) {
                        var c = p.methodMap[a];
                        "undefined" != typeof console && console[c] && console[c].call(console, b)
                    }
                }
            };
            f.logger = p, f.log = e;
            var q = function(a) {
                var b = {};
                return g.extend(b, a), b
            };
            return f.createFrame = q, f
        }(b, c),
        e = function(a, b, c) {
            "use strict";

            function d(a) {
                var b = a && a[0] || 1,
                    c = m;
                if (b !== c) {
                    if (c > b) {
                        var d = n[c],
                            e = n[b];
                        throw new l("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (" + d + ") or downgrade your runtime to an older version (" + e + ").")
                    }
                    throw new l("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (" + a[1] + ").")
                }
            }

            function e(a, b) {
                if (!b) throw new l("No environment passed to template");
                var c = function(a, c, d, e, f, g) {
                        var h = b.VM.invokePartial.apply(this, arguments);
                        if (null != h) return h;
                        if (b.compile) {
                            var i = {
                                helpers: e,
                                partials: f,
                                data: g
                            };
                            return f[c] = b.compile(a, {
                                data: void 0 !== g
                            }, b), f[c](d, i)
                        }
                        throw new l("The partial " + c + " could not be compiled when running in runtime-only mode")
                    },
                    d = {
                        escapeExpression: k.escapeExpression,
                        invokePartial: c,
                        programs: [],
                        program: function(a, b, c) {
                            var d = this.programs[a];
                            return c ? d = g(a, b, c) : d || (d = this.programs[a] = g(a, b)), d
                        },
                        merge: function(a, b) {
                            var c = a || b;
                            return a && b && a !== b && (c = {}, k.extend(c, b), k.extend(c, a)), c
                        },
                        programWithDepth: b.VM.programWithDepth,
                        noop: b.VM.noop,
                        compilerInfo: null
                    };
                return function(c, e) {
                    e = e || {};
                    var f, g, h = e.partial ? e : b;
                    e.partial || (f = e.helpers, g = e.partials);
                    var i = a.call(d, h, c, f, g, e.data);
                    return e.partial || b.VM.checkRevision(d.compilerInfo), i
                }
            }

            function f(a, b, c) {
                var d = Array.prototype.slice.call(arguments, 3),
                    e = function(a, e) {
                        return e = e || {}, b.apply(this, [a, e.data || c].concat(d))
                    };
                return e.program = a, e.depth = d.length, e
            }

            function g(a, b, c) {
                var d = function(a, d) {
                    return d = d || {}, b(a, d.data || c)
                };
                return d.program = a, d.depth = 0, d
            }

            function h(a, b, c, d, e, f) {
                var g = {
                    partial: !0,
                    helpers: d,
                    partials: e,
                    data: f
                };
                if (void 0 === a) throw new l("The partial " + b + " could not be found");
                return a instanceof Function ? a(c, g) : void 0
            }

            function i() {
                return ""
            }
            var j = {},
                k = a,
                l = b,
                m = c.COMPILER_REVISION,
                n = c.REVISION_CHANGES;
            return j.checkRevision = d, j.template = e, j.programWithDepth = f, j.program = g, j.invokePartial = h, j.noop = i, j
        }(b, c, d),
        f = function(a, b, c, d, e) {
            "use strict";
            var f, g = a,
                h = b,
                i = c,
                j = d,
                k = e,
                l = function() {
                    var a = new g.HandlebarsEnvironment;
                    return j.extend(a, g), a.SafeString = h, a.Exception = i, a.Utils = j, a.VM = k, a.template = function(b) {
                        return k.template(b, a)
                    }, a
                },
                m = l();
            return m.create = l, f = m
        }(d, a, c, b, e),
        g = function(a) {
            "use strict";

            function b(a) {
                a = a || {}, this.firstLine = a.first_line, this.firstColumn = a.first_column, this.lastColumn = a.last_column, this.lastLine = a.last_line
            }
            var c, d = a,
                e = {
                    ProgramNode: function(a, c, d, f) {
                        var g, h;
                        3 === arguments.length ? (f = d, d = null) : 2 === arguments.length && (f = c, c = null), b.call(this, f), this.type = "program", this.statements = a, this.strip = {}, d ? (h = d[0], h ? (g = {
                            first_line: h.firstLine,
                            last_line: h.lastLine,
                            last_column: h.lastColumn,
                            first_column: h.firstColumn
                        }, this.inverse = new e.ProgramNode(d, c, g)) : this.inverse = new e.ProgramNode(d, c), this.strip.right = c.left) : c && (this.strip.left = c.right)
                    },
                    MustacheNode: function(a, c, d, f, g) {
                        if (b.call(this, g), this.type = "mustache", this.strip = f, null != d && d.charAt) {
                            var h = d.charAt(3) || d.charAt(2);
                            this.escaped = "{" !== h && "&" !== h
                        } else this.escaped = !!d;
                        this.sexpr = a instanceof e.SexprNode ? a : new e.SexprNode(a, c), this.sexpr.isRoot = !0, this.id = this.sexpr.id, this.params = this.sexpr.params, this.hash = this.sexpr.hash, this.eligibleHelper = this.sexpr.eligibleHelper, this.isHelper = this.sexpr.isHelper
                    },
                    SexprNode: function(a, c, d) {
                        b.call(this, d), this.type = "sexpr", this.hash = c;
                        var e = this.id = a[0],
                            f = this.params = a.slice(1),
                            g = this.eligibleHelper = e.isSimple;
                        this.isHelper = g && (f.length || c)
                    },
                    PartialNode: function(a, c, d, e) {
                        b.call(this, e), this.type = "partial", this.partialName = a, this.context = c, this.strip = d
                    },
                    BlockNode: function(a, c, e, f, g) {
                        if (b.call(this, g), a.sexpr.id.original !== f.path.original) throw new d(a.sexpr.id.original + " doesn't match " + f.path.original, this);
                        this.type = "block", this.mustache = a, this.program = c, this.inverse = e, this.strip = {
                            left: a.strip.left,
                            right: f.strip.right
                        }, (c || e).strip.left = a.strip.right, (e || c).strip.right = f.strip.left, e && !c && (this.isInverse = !0)
                    },
                    ContentNode: function(a, c) {
                        b.call(this, c), this.type = "content", this.string = a
                    },
                    HashNode: function(a, c) {
                        b.call(this, c), this.type = "hash", this.pairs = a
                    },
                    IdNode: function(a, c) {
                        b.call(this, c), this.type = "ID";
                        for (var e = "", f = [], g = 0, h = 0, i = a.length; i > h; h++) {
                            var j = a[h].part;
                            if (e += (a[h].separator || "") + j, ".." === j || "." === j || "this" === j) {
                                if (f.length > 0) throw new d("Invalid path: " + e, this);
                                ".." === j ? g++ : this.isScoped = !0
                            } else f.push(j)
                        }
                        this.original = e, this.parts = f, this.string = f.join("."), this.depth = g, this.isSimple = 1 === a.length && !this.isScoped && 0 === g, this.stringModeValue = this.string
                    },
                    PartialNameNode: function(a, c) {
                        b.call(this, c), this.type = "PARTIAL_NAME", this.name = a.original
                    },
                    DataNode: function(a, c) {
                        b.call(this, c), this.type = "DATA", this.id = a
                    },
                    StringNode: function(a, c) {
                        b.call(this, c), this.type = "STRING", this.original = this.string = this.stringModeValue = a
                    },
                    IntegerNode: function(a, c) {
                        b.call(this, c), this.type = "INTEGER", this.original = this.integer = a, this.stringModeValue = Number(a)
                    },
                    BooleanNode: function(a, c) {
                        b.call(this, c), this.type = "BOOLEAN", this.bool = a, this.stringModeValue = "true" === a
                    },
                    CommentNode: function(a, c) {
                        b.call(this, c), this.type = "comment", this.comment = a
                    }
                };
            return c = e
        }(c),
        h = function() {
            "use strict";
            var a, b = function() {
                function a(a, b) {
                    return {
                        left: "~" === a.charAt(2),
                        right: "~" === b.charAt(0) || "~" === b.charAt(1)
                    }
                }

                function b() {
                    this.yy = {}
                }
                var c = {
                        trace: function() {},
                        yy: {},
                        symbols_: {
                            error: 2,
                            root: 3,
                            statements: 4,
                            EOF: 5,
                            program: 6,
                            simpleInverse: 7,
                            statement: 8,
                            openInverse: 9,
                            closeBlock: 10,
                            openBlock: 11,
                            mustache: 12,
                            partial: 13,
                            CONTENT: 14,
                            COMMENT: 15,
                            OPEN_BLOCK: 16,
                            sexpr: 17,
                            CLOSE: 18,
                            OPEN_INVERSE: 19,
                            OPEN_ENDBLOCK: 20,
                            path: 21,
                            OPEN: 22,
                            OPEN_UNESCAPED: 23,
                            CLOSE_UNESCAPED: 24,
                            OPEN_PARTIAL: 25,
                            partialName: 26,
                            partial_option0: 27,
                            sexpr_repetition0: 28,
                            sexpr_option0: 29,
                            dataName: 30,
                            param: 31,
                            STRING: 32,
                            INTEGER: 33,
                            BOOLEAN: 34,
                            OPEN_SEXPR: 35,
                            CLOSE_SEXPR: 36,
                            hash: 37,
                            hash_repetition_plus0: 38,
                            hashSegment: 39,
                            ID: 40,
                            EQUALS: 41,
                            DATA: 42,
                            pathSegments: 43,
                            SEP: 44,
                            $accept: 0,
                            $end: 1
                        },
                        terminals_: {
                            2: "error",
                            5: "EOF",
                            14: "CONTENT",
                            15: "COMMENT",
                            16: "OPEN_BLOCK",
                            18: "CLOSE",
                            19: "OPEN_INVERSE",
                            20: "OPEN_ENDBLOCK",
                            22: "OPEN",
                            23: "OPEN_UNESCAPED",
                            24: "CLOSE_UNESCAPED",
                            25: "OPEN_PARTIAL",
                            32: "STRING",
                            33: "INTEGER",
                            34: "BOOLEAN",
                            35: "OPEN_SEXPR",
                            36: "CLOSE_SEXPR",
                            40: "ID",
                            41: "EQUALS",
                            42: "DATA",
                            44: "SEP"
                        },
                        productions_: [0, [3, 2],
                            [3, 1],
                            [6, 2],
                            [6, 3],
                            [6, 2],
                            [6, 1],
                            [6, 1],
                            [6, 0],
                            [4, 1],
                            [4, 2],
                            [8, 3],
                            [8, 3],
                            [8, 1],
                            [8, 1],
                            [8, 1],
                            [8, 1],
                            [11, 3],
                            [9, 3],
                            [10, 3],
                            [12, 3],
                            [12, 3],
                            [13, 4],
                            [7, 2],
                            [17, 3],
                            [17, 1],
                            [31, 1],
                            [31, 1],
                            [31, 1],
                            [31, 1],
                            [31, 1],
                            [31, 3],
                            [37, 1],
                            [39, 3],
                            [26, 1],
                            [26, 1],
                            [26, 1],
                            [30, 2],
                            [21, 1],
                            [43, 3],
                            [43, 1],
                            [27, 0],
                            [27, 1],
                            [28, 0],
                            [28, 2],
                            [29, 0],
                            [29, 1],
                            [38, 1],
                            [38, 2]
                        ],
                        performAction: function(b, c, d, e, f, g) {
                            var h = g.length - 1;
                            switch (f) {
                                case 1:
                                    return new e.ProgramNode(g[h - 1], this._$);
                                case 2:
                                    return new e.ProgramNode([], this._$);
                                case 3:
                                    this.$ = new e.ProgramNode([], g[h - 1], g[h], this._$);
                                    break;
                                case 4:
                                    this.$ = new e.ProgramNode(g[h - 2], g[h - 1], g[h], this._$);
                                    break;
                                case 5:
                                    this.$ = new e.ProgramNode(g[h - 1], g[h], [], this._$);
                                    break;
                                case 6:
                                    this.$ = new e.ProgramNode(g[h], this._$);
                                    break;
                                case 7:
                                    this.$ = new e.ProgramNode([], this._$);
                                    break;
                                case 8:
                                    this.$ = new e.ProgramNode([], this._$);
                                    break;
                                case 9:
                                    this.$ = [g[h]];
                                    break;
                                case 10:
                                    g[h - 1].push(g[h]), this.$ = g[h - 1];
                                    break;
                                case 11:
                                    this.$ = new e.BlockNode(g[h - 2], g[h - 1].inverse, g[h - 1], g[h], this._$);
                                    break;
                                case 12:
                                    this.$ = new e.BlockNode(g[h - 2], g[h - 1], g[h - 1].inverse, g[h], this._$);
                                    break;
                                case 13:
                                    this.$ = g[h];
                                    break;
                                case 14:
                                    this.$ = g[h];
                                    break;
                                case 15:
                                    this.$ = new e.ContentNode(g[h], this._$);
                                    break;
                                case 16:
                                    this.$ = new e.CommentNode(g[h], this._$);
                                    break;
                                case 17:
                                    this.$ = new e.MustacheNode(g[h - 1], null, g[h - 2], a(g[h - 2], g[h]), this._$);
                                    break;
                                case 18:
                                    this.$ = new e.MustacheNode(g[h - 1], null, g[h - 2], a(g[h - 2], g[h]), this._$);
                                    break;
                                case 19:
                                    this.$ = {
                                        path: g[h - 1],
                                        strip: a(g[h - 2], g[h])
                                    };
                                    break;
                                case 20:
                                    this.$ = new e.MustacheNode(g[h - 1], null, g[h - 2], a(g[h - 2], g[h]), this._$);
                                    break;
                                case 21:
                                    this.$ = new e.MustacheNode(g[h - 1], null, g[h - 2], a(g[h - 2], g[h]), this._$);
                                    break;
                                case 22:
                                    this.$ = new e.PartialNode(g[h - 2], g[h - 1], a(g[h - 3], g[h]), this._$);
                                    break;
                                case 23:
                                    this.$ = a(g[h - 1], g[h]);
                                    break;
                                case 24:
                                    this.$ = new e.SexprNode([g[h - 2]].concat(g[h - 1]), g[h], this._$);
                                    break;
                                case 25:
                                    this.$ = new e.SexprNode([g[h]], null, this._$);
                                    break;
                                case 26:
                                    this.$ = g[h];
                                    break;
                                case 27:
                                    this.$ = new e.StringNode(g[h], this._$);
                                    break;
                                case 28:
                                    this.$ = new e.IntegerNode(g[h], this._$);
                                    break;
                                case 29:
                                    this.$ = new e.BooleanNode(g[h], this._$);
                                    break;
                                case 30:
                                    this.$ = g[h];
                                    break;
                                case 31:
                                    g[h - 1].isHelper = !0, this.$ = g[h - 1];
                                    break;
                                case 32:
                                    this.$ = new e.HashNode(g[h], this._$);
                                    break;
                                case 33:
                                    this.$ = [g[h - 2], g[h]];
                                    break;
                                case 34:
                                    this.$ = new e.PartialNameNode(g[h], this._$);
                                    break;
                                case 35:
                                    this.$ = new e.PartialNameNode(new e.StringNode(g[h], this._$), this._$);
                                    break;
                                case 36:
                                    this.$ = new e.PartialNameNode(new e.IntegerNode(g[h], this._$));
                                    break;
                                case 37:
                                    this.$ = new e.DataNode(g[h], this._$);
                                    break;
                                case 38:
                                    this.$ = new e.IdNode(g[h], this._$);
                                    break;
                                case 39:
                                    g[h - 2].push({
                                        part: g[h],
                                        separator: g[h - 1]
                                    }), this.$ = g[h - 2];
                                    break;
                                case 40:
                                    this.$ = [{
                                        part: g[h]
                                    }];
                                    break;
                                case 43:
                                    this.$ = [];
                                    break;
                                case 44:
                                    g[h - 1].push(g[h]);
                                    break;
                                case 47:
                                    this.$ = [g[h]];
                                    break;
                                case 48:
                                    g[h - 1].push(g[h])
                            }
                        },
                        table: [{
                            3: 1,
                            4: 2,
                            5: [1, 3],
                            8: 4,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            1: [3]
                        }, {
                            5: [1, 16],
                            8: 17,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            1: [2, 2]
                        }, {
                            5: [2, 9],
                            14: [2, 9],
                            15: [2, 9],
                            16: [2, 9],
                            19: [2, 9],
                            20: [2, 9],
                            22: [2, 9],
                            23: [2, 9],
                            25: [2, 9]
                        }, {
                            4: 20,
                            6: 18,
                            7: 19,
                            8: 4,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 21],
                            20: [2, 8],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            4: 20,
                            6: 22,
                            7: 19,
                            8: 4,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 21],
                            20: [2, 8],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            5: [2, 13],
                            14: [2, 13],
                            15: [2, 13],
                            16: [2, 13],
                            19: [2, 13],
                            20: [2, 13],
                            22: [2, 13],
                            23: [2, 13],
                            25: [2, 13]
                        }, {
                            5: [2, 14],
                            14: [2, 14],
                            15: [2, 14],
                            16: [2, 14],
                            19: [2, 14],
                            20: [2, 14],
                            22: [2, 14],
                            23: [2, 14],
                            25: [2, 14]
                        }, {
                            5: [2, 15],
                            14: [2, 15],
                            15: [2, 15],
                            16: [2, 15],
                            19: [2, 15],
                            20: [2, 15],
                            22: [2, 15],
                            23: [2, 15],
                            25: [2, 15]
                        }, {
                            5: [2, 16],
                            14: [2, 16],
                            15: [2, 16],
                            16: [2, 16],
                            19: [2, 16],
                            20: [2, 16],
                            22: [2, 16],
                            23: [2, 16],
                            25: [2, 16]
                        }, {
                            17: 23,
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            17: 29,
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            17: 30,
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            17: 31,
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            21: 33,
                            26: 32,
                            32: [1, 34],
                            33: [1, 35],
                            40: [1, 28],
                            43: 26
                        }, {
                            1: [2, 1]
                        }, {
                            5: [2, 10],
                            14: [2, 10],
                            15: [2, 10],
                            16: [2, 10],
                            19: [2, 10],
                            20: [2, 10],
                            22: [2, 10],
                            23: [2, 10],
                            25: [2, 10]
                        }, {
                            10: 36,
                            20: [1, 37]
                        }, {
                            4: 38,
                            8: 4,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            20: [2, 7],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            7: 39,
                            8: 17,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 21],
                            20: [2, 6],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            17: 23,
                            18: [1, 40],
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            10: 41,
                            20: [1, 37]
                        }, {
                            18: [1, 42]
                        }, {
                            18: [2, 43],
                            24: [2, 43],
                            28: 43,
                            32: [2, 43],
                            33: [2, 43],
                            34: [2, 43],
                            35: [2, 43],
                            36: [2, 43],
                            40: [2, 43],
                            42: [2, 43]
                        }, {
                            18: [2, 25],
                            24: [2, 25],
                            36: [2, 25]
                        }, {
                            18: [2, 38],
                            24: [2, 38],
                            32: [2, 38],
                            33: [2, 38],
                            34: [2, 38],
                            35: [2, 38],
                            36: [2, 38],
                            40: [2, 38],
                            42: [2, 38],
                            44: [1, 44]
                        }, {
                            21: 45,
                            40: [1, 28],
                            43: 26
                        }, {
                            18: [2, 40],
                            24: [2, 40],
                            32: [2, 40],
                            33: [2, 40],
                            34: [2, 40],
                            35: [2, 40],
                            36: [2, 40],
                            40: [2, 40],
                            42: [2, 40],
                            44: [2, 40]
                        }, {
                            18: [1, 46]
                        }, {
                            18: [1, 47]
                        }, {
                            24: [1, 48]
                        }, {
                            18: [2, 41],
                            21: 50,
                            27: 49,
                            40: [1, 28],
                            43: 26
                        }, {
                            18: [2, 34],
                            40: [2, 34]
                        }, {
                            18: [2, 35],
                            40: [2, 35]
                        }, {
                            18: [2, 36],
                            40: [2, 36]
                        }, {
                            5: [2, 11],
                            14: [2, 11],
                            15: [2, 11],
                            16: [2, 11],
                            19: [2, 11],
                            20: [2, 11],
                            22: [2, 11],
                            23: [2, 11],
                            25: [2, 11]
                        }, {
                            21: 51,
                            40: [1, 28],
                            43: 26
                        }, {
                            8: 17,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            20: [2, 3],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            4: 52,
                            8: 4,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            20: [2, 5],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            14: [2, 23],
                            15: [2, 23],
                            16: [2, 23],
                            19: [2, 23],
                            20: [2, 23],
                            22: [2, 23],
                            23: [2, 23],
                            25: [2, 23]
                        }, {
                            5: [2, 12],
                            14: [2, 12],
                            15: [2, 12],
                            16: [2, 12],
                            19: [2, 12],
                            20: [2, 12],
                            22: [2, 12],
                            23: [2, 12],
                            25: [2, 12]
                        }, {
                            14: [2, 18],
                            15: [2, 18],
                            16: [2, 18],
                            19: [2, 18],
                            20: [2, 18],
                            22: [2, 18],
                            23: [2, 18],
                            25: [2, 18]
                        }, {
                            18: [2, 45],
                            21: 56,
                            24: [2, 45],
                            29: 53,
                            30: 60,
                            31: 54,
                            32: [1, 57],
                            33: [1, 58],
                            34: [1, 59],
                            35: [1, 61],
                            36: [2, 45],
                            37: 55,
                            38: 62,
                            39: 63,
                            40: [1, 64],
                            42: [1, 27],
                            43: 26
                        }, {
                            40: [1, 65]
                        }, {
                            18: [2, 37],
                            24: [2, 37],
                            32: [2, 37],
                            33: [2, 37],
                            34: [2, 37],
                            35: [2, 37],
                            36: [2, 37],
                            40: [2, 37],
                            42: [2, 37]
                        }, {
                            14: [2, 17],
                            15: [2, 17],
                            16: [2, 17],
                            19: [2, 17],
                            20: [2, 17],
                            22: [2, 17],
                            23: [2, 17],
                            25: [2, 17]
                        }, {
                            5: [2, 20],
                            14: [2, 20],
                            15: [2, 20],
                            16: [2, 20],
                            19: [2, 20],
                            20: [2, 20],
                            22: [2, 20],
                            23: [2, 20],
                            25: [2, 20]
                        }, {
                            5: [2, 21],
                            14: [2, 21],
                            15: [2, 21],
                            16: [2, 21],
                            19: [2, 21],
                            20: [2, 21],
                            22: [2, 21],
                            23: [2, 21],
                            25: [2, 21]
                        }, {
                            18: [1, 66]
                        }, {
                            18: [2, 42]
                        }, {
                            18: [1, 67]
                        }, {
                            8: 17,
                            9: 5,
                            11: 6,
                            12: 7,
                            13: 8,
                            14: [1, 9],
                            15: [1, 10],
                            16: [1, 12],
                            19: [1, 11],
                            20: [2, 4],
                            22: [1, 13],
                            23: [1, 14],
                            25: [1, 15]
                        }, {
                            18: [2, 24],
                            24: [2, 24],
                            36: [2, 24]
                        }, {
                            18: [2, 44],
                            24: [2, 44],
                            32: [2, 44],
                            33: [2, 44],
                            34: [2, 44],
                            35: [2, 44],
                            36: [2, 44],
                            40: [2, 44],
                            42: [2, 44]
                        }, {
                            18: [2, 46],
                            24: [2, 46],
                            36: [2, 46]
                        }, {
                            18: [2, 26],
                            24: [2, 26],
                            32: [2, 26],
                            33: [2, 26],
                            34: [2, 26],
                            35: [2, 26],
                            36: [2, 26],
                            40: [2, 26],
                            42: [2, 26]
                        }, {
                            18: [2, 27],
                            24: [2, 27],
                            32: [2, 27],
                            33: [2, 27],
                            34: [2, 27],
                            35: [2, 27],
                            36: [2, 27],
                            40: [2, 27],
                            42: [2, 27]
                        }, {
                            18: [2, 28],
                            24: [2, 28],
                            32: [2, 28],
                            33: [2, 28],
                            34: [2, 28],
                            35: [2, 28],
                            36: [2, 28],
                            40: [2, 28],
                            42: [2, 28]
                        }, {
                            18: [2, 29],
                            24: [2, 29],
                            32: [2, 29],
                            33: [2, 29],
                            34: [2, 29],
                            35: [2, 29],
                            36: [2, 29],
                            40: [2, 29],
                            42: [2, 29]
                        }, {
                            18: [2, 30],
                            24: [2, 30],
                            32: [2, 30],
                            33: [2, 30],
                            34: [2, 30],
                            35: [2, 30],
                            36: [2, 30],
                            40: [2, 30],
                            42: [2, 30]
                        }, {
                            17: 68,
                            21: 24,
                            30: 25,
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            18: [2, 32],
                            24: [2, 32],
                            36: [2, 32],
                            39: 69,
                            40: [1, 70]
                        }, {
                            18: [2, 47],
                            24: [2, 47],
                            36: [2, 47],
                            40: [2, 47]
                        }, {
                            18: [2, 40],
                            24: [2, 40],
                            32: [2, 40],
                            33: [2, 40],
                            34: [2, 40],
                            35: [2, 40],
                            36: [2, 40],
                            40: [2, 40],
                            41: [1, 71],
                            42: [2, 40],
                            44: [2, 40]
                        }, {
                            18: [2, 39],
                            24: [2, 39],
                            32: [2, 39],
                            33: [2, 39],
                            34: [2, 39],
                            35: [2, 39],
                            36: [2, 39],
                            40: [2, 39],
                            42: [2, 39],
                            44: [2, 39]
                        }, {
                            5: [2, 22],
                            14: [2, 22],
                            15: [2, 22],
                            16: [2, 22],
                            19: [2, 22],
                            20: [2, 22],
                            22: [2, 22],
                            23: [2, 22],
                            25: [2, 22]
                        }, {
                            5: [2, 19],
                            14: [2, 19],
                            15: [2, 19],
                            16: [2, 19],
                            19: [2, 19],
                            20: [2, 19],
                            22: [2, 19],
                            23: [2, 19],
                            25: [2, 19]
                        }, {
                            36: [1, 72]
                        }, {
                            18: [2, 48],
                            24: [2, 48],
                            36: [2, 48],
                            40: [2, 48]
                        }, {
                            41: [1, 71]
                        }, {
                            21: 56,
                            30: 60,
                            31: 73,
                            32: [1, 57],
                            33: [1, 58],
                            34: [1, 59],
                            35: [1, 61],
                            40: [1, 28],
                            42: [1, 27],
                            43: 26
                        }, {
                            18: [2, 31],
                            24: [2, 31],
                            32: [2, 31],
                            33: [2, 31],
                            34: [2, 31],
                            35: [2, 31],
                            36: [2, 31],
                            40: [2, 31],
                            42: [2, 31]
                        }, {
                            18: [2, 33],
                            24: [2, 33],
                            36: [2, 33],
                            40: [2, 33]
                        }],
                        defaultActions: {
                            3: [2, 2],
                            16: [2, 1],
                            50: [2, 42]
                        },
                        parseError: function(a) {
                            throw new Error(a)
                        },
                        parse: function(a) {
                            function b() {
                                var a;
                                return a = c.lexer.lex() || 1, "number" != typeof a && (a = c.symbols_[a] || a), a
                            }
                            var c = this,
                                d = [0],
                                e = [null],
                                f = [],
                                g = this.table,
                                h = "",
                                i = 0,
                                j = 0,
                                k = 0;
                            this.lexer.setInput(a), this.lexer.yy = this.yy, this.yy.lexer = this.lexer, this.yy.parser = this, "undefined" == typeof this.lexer.yylloc && (this.lexer.yylloc = {});
                            var l = this.lexer.yylloc;
                            f.push(l);
                            var m = this.lexer.options && this.lexer.options.ranges;
                            "function" == typeof this.yy.parseError && (this.parseError = this.yy.parseError);
                            for (var n, o, p, q, r, s, t, u, v, w = {};;) {
                                if (p = d[d.length - 1], this.defaultActions[p] ? q = this.defaultActions[p] : ((null === n || "undefined" == typeof n) && (n = b()), q = g[p] && g[p][n]), "undefined" == typeof q || !q.length || !q[0]) {
                                    var x = "";
                                    if (!k) {
                                        v = [];
                                        for (s in g[p]) this.terminals_[s] && s > 2 && v.push("'" + this.terminals_[s] + "'");
                                        x = this.lexer.showPosition ? "Parse error on line " + (i + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + v.join(", ") + ", got '" + (this.terminals_[n] || n) + "'" : "Parse error on line " + (i + 1) + ": Unexpected " + (1 == n ? "end of input" : "'" + (this.terminals_[n] || n) + "'"), this.parseError(x, {
                                            text: this.lexer.match,
                                            token: this.terminals_[n] || n,
                                            line: this.lexer.yylineno,
                                            loc: l,
                                            expected: v
                                        })
                                    }
                                }
                                if (q[0] instanceof Array && q.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + p + ", token: " + n);
                                switch (q[0]) {
                                    case 1:
                                        d.push(n), e.push(this.lexer.yytext), f.push(this.lexer.yylloc), d.push(q[1]), n = null, o ? (n = o, o = null) : (j = this.lexer.yyleng, h = this.lexer.yytext, i = this.lexer.yylineno, l = this.lexer.yylloc, k > 0 && k--);
                                        break;
                                    case 2:
                                        if (t = this.productions_[q[1]][1], w.$ = e[e.length - t], w._$ = {
                                                first_line: f[f.length - (t || 1)].first_line,
                                                last_line: f[f.length - 1].last_line,
                                                first_column: f[f.length - (t || 1)].first_column,
                                                last_column: f[f.length - 1].last_column
                                            }, m && (w._$.range = [f[f.length - (t || 1)].range[0], f[f.length - 1].range[1]]), r = this.performAction.call(w, h, j, i, this.yy, q[1], e, f), "undefined" != typeof r) return r;
                                        t && (d = d.slice(0, 2 * -1 * t), e = e.slice(0, -1 * t), f = f.slice(0, -1 * t)), d.push(this.productions_[q[1]][0]), e.push(w.$), f.push(w._$), u = g[d[d.length - 2]][d[d.length - 1]], d.push(u);
                                        break;
                                    case 3:
                                        return !0
                                }
                            }
                            return !0
                        }
                    },
                    d = function() {
                        var a = {
                            EOF: 1,
                            parseError: function(a, b) {
                                if (!this.yy.parser) throw new Error(a);
                                this.yy.parser.parseError(a, b)
                            },
                            setInput: function(a) {
                                return this._input = a, this._more = this._less = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
                                    first_line: 1,
                                    first_column: 0,
                                    last_line: 1,
                                    last_column: 0
                                }, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this
                            },
                            input: function() {
                                var a = this._input[0];
                                this.yytext += a, this.yyleng++, this.offset++, this.match += a, this.matched += a;
                                var b = a.match(/(?:\r\n?|\n).*/g);
                                return b ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1] ++, this._input = this._input.slice(1), a
                            },
                            unput: function(a) {
                                var b = a.length,
                                    c = a.split(/(?:\r\n?|\n)/g);
                                this._input = a + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - b - 1), this.offset -= b;
                                var d = this.match.split(/(?:\r\n?|\n)/g);
                                this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), c.length - 1 && (this.yylineno -= c.length - 1);
                                var e = this.yylloc.range;
                                return this.yylloc = {
                                    first_line: this.yylloc.first_line,
                                    last_line: this.yylineno + 1,
                                    first_column: this.yylloc.first_column,
                                    last_column: c ? (c.length === d.length ? this.yylloc.first_column : 0) + d[d.length - c.length].length - c[0].length : this.yylloc.first_column - b
                                }, this.options.ranges && (this.yylloc.range = [e[0], e[0] + this.yyleng - b]), this
                            },
                            more: function() {
                                return this._more = !0, this
                            },
                            less: function(a) {
                                this.unput(this.match.slice(a))
                            },
                            pastInput: function() {
                                var a = this.matched.substr(0, this.matched.length - this.match.length);
                                return (a.length > 20 ? "..." : "") + a.substr(-20).replace(/\n/g, "")
                            },
                            upcomingInput: function() {
                                var a = this.match;
                                return a.length < 20 && (a += this._input.substr(0, 20 - a.length)), (a.substr(0, 20) + (a.length > 20 ? "..." : "")).replace(/\n/g, "")
                            },
                            showPosition: function() {
                                var a = this.pastInput(),
                                    b = new Array(a.length + 1).join("-");
                                return a + this.upcomingInput() + "\n" + b + "^"
                            },
                            next: function() {
                                if (this.done) return this.EOF;
                                this._input || (this.done = !0);
                                var a, b, c, d, e;
                                this._more || (this.yytext = "", this.match = "");
                                for (var f = this._currentRules(), g = 0; g < f.length && (c = this._input.match(this.rules[f[g]]), !c || b && !(c[0].length > b[0].length) || (b = c, d = g, this.options.flex)); g++);
                                return b ? (e = b[0].match(/(?:\r\n?|\n).*/g), e && (this.yylineno += e.length), this.yylloc = {
                                    first_line: this.yylloc.last_line,
                                    last_line: this.yylineno + 1,
                                    first_column: this.yylloc.last_column,
                                    last_column: e ? e[e.length - 1].length - e[e.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + b[0].length
                                }, this.yytext += b[0], this.match += b[0], this.matches = b, this.yyleng = this.yytext.length, this.options.ranges && (this.yylloc.range = [this.offset, this.offset += this.yyleng]), this._more = !1, this._input = this._input.slice(b[0].length), this.matched += b[0], a = this.performAction.call(this, this.yy, this, f[d], this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), a ? a : void 0) : "" === this._input ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                                    text: "",
                                    token: null,
                                    line: this.yylineno
                                })
                            },
                            lex: function() {
                                var a = this.next();
                                return "undefined" != typeof a ? a : this.lex()
                            },
                            begin: function(a) {
                                this.conditionStack.push(a)
                            },
                            popState: function() {
                                return this.conditionStack.pop()
                            },
                            _currentRules: function() {
                                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules
                            },
                            topState: function() {
                                return this.conditionStack[this.conditionStack.length - 2]
                            },
                            pushState: function(a) {
                                this.begin(a)
                            }
                        };
                        return a.options = {}, a.performAction = function(a, b, c, d) {
                            function e(a, c) {
                                return b.yytext = b.yytext.substr(a, b.yyleng - c)
                            }
                            switch (c) {
                                case 0:
                                    if ("\\\\" === b.yytext.slice(-2) ? (e(0, 1), this.begin("mu")) : "\\" === b.yytext.slice(-1) ? (e(0, 1), this.begin("emu")) : this.begin("mu"), b.yytext) return 14;
                                    break;
                                case 1:
                                    return 14;
                                case 2:
                                    return this.popState(), 14;
                                case 3:
                                    return e(0, 4), this.popState(), 15;
                                case 4:
                                    return 35;
                                case 5:
                                    return 36;
                                case 6:
                                    return 25;
                                case 7:
                                    return 16;
                                case 8:
                                    return 20;
                                case 9:
                                    return 19;
                                case 10:
                                    return 19;
                                case 11:
                                    return 23;
                                case 12:
                                    return 22;
                                case 13:
                                    this.popState(), this.begin("com");
                                    break;
                                case 14:
                                    return e(3, 5), this.popState(), 15;
                                case 15:
                                    return 22;
                                case 16:
                                    return 41;
                                case 17:
                                    return 40;
                                case 18:
                                    return 40;
                                case 19:
                                    return 44;
                                case 20:
                                    break;
                                case 21:
                                    return this.popState(), 24;
                                case 22:
                                    return this.popState(), 18;
                                case 23:
                                    return b.yytext = e(1, 2).replace(/\\"/g, '"'), 32;
                                case 24:
                                    return b.yytext = e(1, 2).replace(/\\'/g, "'"), 32;
                                case 25:
                                    return 42;
                                case 26:
                                    return 34;
                                case 27:
                                    return 34;
                                case 28:
                                    return 33;
                                case 29:
                                    return 40;
                                case 30:
                                    return b.yytext = e(1, 2), 40;
                                case 31:
                                    return "INVALID";
                                case 32:
                                    return 5
                            }
                        }, a.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:[\s\S]*?--\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{!--)/, /^(?:\{\{![\s\S]*?\}\})/, /^(?:\{\{(~)?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:-?[0-9]+(?=([~}\s)])))/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/, /^(?:\[[^\]]*\])/, /^(?:.)/, /^(?:$)/], a.conditions = {
                            mu: {
                                rules: [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32],
                                inclusive: !1
                            },
                            emu: {
                                rules: [2],
                                inclusive: !1
                            },
                            com: {
                                rules: [3],
                                inclusive: !1
                            },
                            INITIAL: {
                                rules: [0, 1, 32],
                                inclusive: !0
                            }
                        }, a
                    }();
                return c.lexer = d, b.prototype = c, c.Parser = b, new b
            }();
            return a = b
        }(),
        i = function(a, b) {
            "use strict";

            function c(a) {
                return a.constructor === f.ProgramNode ? a : (e.yy = f, e.parse(a))
            }
            var d = {},
                e = a,
                f = b;
            return d.parser = e, d.parse = c, d
        }(h, g),
        j = function(a) {
            "use strict";

            function b() {}

            function c(a, b, c) {
                if (null == a || "string" != typeof a && a.constructor !== c.AST.ProgramNode) throw new f("You must pass a string or Handlebars AST to Handlebars.precompile. You passed " + a);
                b = b || {}, "data" in b || (b.data = !0);
                var d = c.parse(a),
                    e = (new c.Compiler).compile(d, b);
                return (new c.JavaScriptCompiler).compile(e, b)
            }

            function d(a, b, c) {
                function d() {
                    var d = c.parse(a),
                        e = (new c.Compiler).compile(d, b),
                        f = (new c.JavaScriptCompiler).compile(e, b, void 0, !0);
                    return c.template(f)
                }
                if (null == a || "string" != typeof a && a.constructor !== c.AST.ProgramNode) throw new f("You must pass a string or Handlebars AST to Handlebars.compile. You passed " + a);
                b = b || {}, "data" in b || (b.data = !0);
                var e;
                return function(a, b) {
                    return e || (e = d()), e.call(this, a, b)
                }
            }
            var e = {},
                f = a;
            return e.Compiler = b, b.prototype = {
                compiler: b,
                disassemble: function() {
                    for (var a, b, c, d = this.opcodes, e = [], f = 0, g = d.length; g > f; f++)
                        if (a = d[f], "DECLARE" === a.opcode) e.push("DECLARE " + a.name + "=" + a.value);
                        else {
                            b = [];
                            for (var h = 0; h < a.args.length; h++) c = a.args[h], "string" == typeof c && (c = '"' + c.replace("\n", "\\n") + '"'), b.push(c);
                            e.push(a.opcode + " " + b.join(" "))
                        }
                    return e.join("\n")
                },
                equals: function(a) {
                    var b = this.opcodes.length;
                    if (a.opcodes.length !== b) return !1;
                    for (var c = 0; b > c; c++) {
                        var d = this.opcodes[c],
                            e = a.opcodes[c];
                        if (d.opcode !== e.opcode || d.args.length !== e.args.length) return !1;
                        for (var f = 0; f < d.args.length; f++)
                            if (d.args[f] !== e.args[f]) return !1
                    }
                    if (b = this.children.length, a.children.length !== b) return !1;
                    for (c = 0; b > c; c++)
                        if (!this.children[c].equals(a.children[c])) return !1;
                    return !0
                },
                guid: 0,
                compile: function(a, b) {
                    this.opcodes = [], this.children = [], this.depths = {
                        list: []
                    }, this.options = b;
                    var c = this.options.knownHelpers;
                    if (this.options.knownHelpers = {
                            helperMissing: !0,
                            blockHelperMissing: !0,
                            each: !0,
                            "if": !0,
                            unless: !0,
                            "with": !0,
                            log: !0
                        }, c)
                        for (var d in c) this.options.knownHelpers[d] = c[d];
                    return this.accept(a)
                },
                accept: function(a) {
                    var b, c = a.strip || {};
                    return c.left && this.opcode("strip"), b = this[a.type](a), c.right && this.opcode("strip"), b
                },
                program: function(a) {
                    for (var b = a.statements, c = 0, d = b.length; d > c; c++) this.accept(b[c]);
                    return this.isSimple = 1 === d, this.depths.list = this.depths.list.sort(function(a, b) {
                        return a - b
                    }), this
                },
                compileProgram: function(a) {
                    var b, c = (new this.compiler).compile(a, this.options),
                        d = this.guid++;
                    this.usePartial = this.usePartial || c.usePartial, this.children[d] = c;
                    for (var e = 0, f = c.depths.list.length; f > e; e++) b = c.depths.list[e], 2 > b || this.addDepth(b - 1);
                    return d
                },
                block: function(a) {
                    var b = a.mustache,
                        c = a.program,
                        d = a.inverse;
                    c && (c = this.compileProgram(c)), d && (d = this.compileProgram(d));
                    var e = b.sexpr,
                        f = this.classifySexpr(e);
                    "helper" === f ? this.helperSexpr(e, c, d) : "simple" === f ? (this.simpleSexpr(e), this.opcode("pushProgram", c), this.opcode("pushProgram", d), this.opcode("emptyHash"), this.opcode("blockValue")) : (this.ambiguousSexpr(e, c, d), this.opcode("pushProgram", c), this.opcode("pushProgram", d), this.opcode("emptyHash"), this.opcode("ambiguousBlockValue")), this.opcode("append")
                },
                hash: function(a) {
                    var b, c, d = a.pairs;
                    this.opcode("pushHash");
                    for (var e = 0, f = d.length; f > e; e++) b = d[e], c = b[1], this.options.stringParams ? (c.depth && this.addDepth(c.depth), this.opcode("getContext", c.depth || 0), this.opcode("pushStringParam", c.stringModeValue, c.type), "sexpr" === c.type && this.sexpr(c)) : this.accept(c), this.opcode("assignToHash", b[0]);
                    this.opcode("popHash")
                },
                partial: function(a) {
                    var b = a.partialName;
                    this.usePartial = !0, a.context ? this.ID(a.context) : this.opcode("push", "depth0"), this.opcode("invokePartial", b.name), this.opcode("append")
                },
                content: function(a) {
                    this.opcode("appendContent", a.string)
                },
                mustache: function(a) {
                    this.sexpr(a.sexpr), a.escaped && !this.options.noEscape ? this.opcode("appendEscaped") : this.opcode("append")
                },
                ambiguousSexpr: function(a, b, c) {
                    var d = a.id,
                        e = d.parts[0],
                        f = null != b || null != c;
                    this.opcode("getContext", d.depth), this.opcode("pushProgram", b), this.opcode("pushProgram", c), this.opcode("invokeAmbiguous", e, f)
                },
                simpleSexpr: function(a) {
                    var b = a.id;
                    "DATA" === b.type ? this.DATA(b) : b.parts.length ? this.ID(b) : (this.addDepth(b.depth), this.opcode("getContext", b.depth), this.opcode("pushContext")), this.opcode("resolvePossibleLambda")
                },
                helperSexpr: function(a, b, c) {
                    var d = this.setupFullMustacheParams(a, b, c),
                        e = a.id.parts[0];
                    if (this.options.knownHelpers[e]) this.opcode("invokeKnownHelper", d.length, e);
                    else {
                        if (this.options.knownHelpersOnly) throw new f("You specified knownHelpersOnly, but used the unknown helper " + e, a);
                        this.opcode("invokeHelper", d.length, e, a.isRoot)
                    }
                },
                sexpr: function(a) {
                    var b = this.classifySexpr(a);
                    "simple" === b ? this.simpleSexpr(a) : "helper" === b ? this.helperSexpr(a) : this.ambiguousSexpr(a)
                },
                ID: function(a) {
                    this.addDepth(a.depth), this.opcode("getContext", a.depth);
                    var b = a.parts[0];
                    b ? this.opcode("lookupOnContext", a.parts[0]) : this.opcode("pushContext");
                    for (var c = 1, d = a.parts.length; d > c; c++) this.opcode("lookup", a.parts[c])
                },
                DATA: function(a) {
                    if (this.options.data = !0, a.id.isScoped || a.id.depth) throw new f("Scoped data references are not supported: " + a.original, a);
                    this.opcode("lookupData");
                    for (var b = a.id.parts, c = 0, d = b.length; d > c; c++) this.opcode("lookup", b[c])
                },
                STRING: function(a) {
                    this.opcode("pushString", a.string)
                },
                INTEGER: function(a) {
                    this.opcode("pushLiteral", a.integer)
                },
                BOOLEAN: function(a) {
                    this.opcode("pushLiteral", a.bool)
                },
                comment: function() {},
                opcode: function(a) {
                    this.opcodes.push({
                        opcode: a,
                        args: [].slice.call(arguments, 1)
                    })
                },
                declare: function(a, b) {
                    this.opcodes.push({
                        opcode: "DECLARE",
                        name: a,
                        value: b
                    })
                },
                addDepth: function(a) {
                    0 !== a && (this.depths[a] || (this.depths[a] = !0, this.depths.list.push(a)))
                },
                classifySexpr: function(a) {
                    var b = a.isHelper,
                        c = a.eligibleHelper,
                        d = this.options;
                    if (c && !b) {
                        var e = a.id.parts[0];
                        d.knownHelpers[e] ? b = !0 : d.knownHelpersOnly && (c = !1)
                    }
                    return b ? "helper" : c ? "ambiguous" : "simple"
                },
                pushParams: function(a) {
                    for (var b, c = a.length; c--;) b = a[c], this.options.stringParams ? (b.depth && this.addDepth(b.depth), this.opcode("getContext", b.depth || 0), this.opcode("pushStringParam", b.stringModeValue, b.type), "sexpr" === b.type && this.sexpr(b)) : this[b.type](b)
                },
                setupFullMustacheParams: function(a, b, c) {
                    var d = a.params;
                    return this.pushParams(d), this.opcode("pushProgram", b), this.opcode("pushProgram", c), a.hash ? this.hash(a.hash) : this.opcode("emptyHash"), d
                }
            }, e.precompile = c, e.compile = d, e
        }(c),
        k = function(a, b) {
            "use strict";

            function c(a) {
                this.value = a
            }

            function d() {}
            var e, f = a.COMPILER_REVISION,
                g = a.REVISION_CHANGES,
                h = a.log,
                i = b;
            d.prototype = {
                nameLookup: function(a, b) {
                    var c, e;
                    return 0 === a.indexOf("depth") && (c = !0), e = /^[0-9]+$/.test(b) ? a + "[" + b + "]" : d.isValidJavaScriptVariableName(b) ? a + "." + b : a + "['" + b + "']", c ? "(" + a + " && " + e + ")" : e
                },
                compilerInfo: function() {
                    var a = f,
                        b = g[a];
                    return "this.compilerInfo = [" + a + ",'" + b + "'];\n"
                },
                appendToBuffer: function(a) {
                    return this.environment.isSimple ? "return " + a + ";" : {
                        appendToBuffer: !0,
                        content: a,
                        toString: function() {
                            return "buffer += " + a + ";"
                        }
                    }
                },
                initializeBuffer: function() {
                    return this.quotedString("")
                },
                namespace: "Handlebars",
                compile: function(a, b, c, d) {
                    this.environment = a, this.options = b || {}, h("debug", this.environment.disassemble() + "\n\n"), this.name = this.environment.name, this.isChild = !!c, this.context = c || {
                        programs: [],
                        environments: [],
                        aliases: {}
                    }, this.preamble(), this.stackSlot = 0, this.stackVars = [], this.registers = {
                        list: []
                    }, this.hashes = [], this.compileStack = [], this.inlineStack = [], this.compileChildren(a, b);
                    var e, f = a.opcodes;
                    this.i = 0;
                    for (var g = f.length; this.i < g; this.i++) e = f[this.i], "DECLARE" === e.opcode ? this[e.name] = e.value : this[e.opcode].apply(this, e.args), e.opcode !== this.stripNext && (this.stripNext = !1);
                    if (this.pushSource(""), this.stackSlot || this.inlineStack.length || this.compileStack.length) throw new i("Compile completed with content left on stack");
                    return this.createFunctionContext(d)
                },
                preamble: function() {
                    var a = [];
                    if (this.isChild) a.push("");
                    else {
                        var b = this.namespace,
                            c = "helpers = this.merge(helpers, " + b + ".helpers);";
                        this.environment.usePartial && (c = c + " partials = this.merge(partials, " + b + ".partials);"), this.options.data && (c += " data = data || {};"), a.push(c)
                    }
                    this.environment.isSimple ? a.push("") : a.push(", buffer = " + this.initializeBuffer()), this.lastContext = 0, this.source = a
                },
                createFunctionContext: function(a) {
                    var b = this.stackVars.concat(this.registers.list);
                    if (b.length > 0 && (this.source[1] = this.source[1] + ", " + b.join(", ")), !this.isChild)
                        for (var c in this.context.aliases) this.context.aliases.hasOwnProperty(c) && (this.source[1] = this.source[1] + ", " + c + "=" + this.context.aliases[c]);
                    this.source[1] && (this.source[1] = "var " + this.source[1].substring(2) + ";"), this.isChild || (this.source[1] += "\n" + this.context.programs.join("\n") + "\n"), this.environment.isSimple || this.pushSource("return buffer;");
                    for (var d = this.isChild ? ["depth0", "data"] : ["Handlebars", "depth0", "helpers", "partials", "data"], e = 0, f = this.environment.depths.list.length; f > e; e++) d.push("depth" + this.environment.depths.list[e]);
                    var g = this.mergeSource();
                    if (this.isChild || (g = this.compilerInfo() + g), a) return d.push(g), Function.apply(this, d);
                    var i = "function " + (this.name || "") + "(" + d.join(",") + ") {\n  " + g + "}";
                    return h("debug", i + "\n\n"), i
                },
                mergeSource: function() {
                    for (var a, b = "", c = 0, d = this.source.length; d > c; c++) {
                        var e = this.source[c];
                        e.appendToBuffer ? a = a ? a + "\n    + " + e.content : e.content : (a && (b += "buffer += " + a + ";\n  ", a = void 0), b += e + "\n  ")
                    }
                    return b
                },
                blockValue: function() {
                    this.context.aliases.blockHelperMissing = "helpers.blockHelperMissing";
                    var a = ["depth0"];
                    this.setupParams(0, a), this.replaceStack(function(b) {
                        return a.splice(1, 0, b), "blockHelperMissing.call(" + a.join(", ") + ")"
                    })
                },
                ambiguousBlockValue: function() {
                    this.context.aliases.blockHelperMissing = "helpers.blockHelperMissing";
                    var a = ["depth0"];
                    this.setupParams(0, a);
                    var b = this.topStack();
                    a.splice(1, 0, b), this.pushSource("if (!" + this.lastHelper + ") { " + b + " = blockHelperMissing.call(" + a.join(", ") + "); }")
                },
                appendContent: function(a) {
                    this.pendingContent && (a = this.pendingContent + a), this.stripNext && (a = a.replace(/^\s+/, "")), this.pendingContent = a
                },
                strip: function() {
                    this.pendingContent && (this.pendingContent = this.pendingContent.replace(/\s+$/, "")), this.stripNext = "strip"
                },
                append: function() {
                    this.flushInline();
                    var a = this.popStack();
                    this.pushSource("if(" + a + " || " + a + " === 0) { " + this.appendToBuffer(a) + " }"), this.environment.isSimple && this.pushSource("else { " + this.appendToBuffer("''") + " }")
                },
                appendEscaped: function() {
                    this.context.aliases.escapeExpression = "this.escapeExpression", this.pushSource(this.appendToBuffer("escapeExpression(" + this.popStack() + ")"))
                },
                getContext: function(a) {
                    this.lastContext !== a && (this.lastContext = a)
                },
                lookupOnContext: function(a) {
                    this.push(this.nameLookup("depth" + this.lastContext, a, "context"))
                },
                pushContext: function() {
                    this.pushStackLiteral("depth" + this.lastContext)
                },
                resolvePossibleLambda: function() {
                    this.context.aliases.functionType = '"function"', this.replaceStack(function(a) {
                        return "typeof " + a + " === functionType ? " + a + ".apply(depth0) : " + a
                    })
                },
                lookup: function(a) {
                    this.replaceStack(function(b) {
                        return b + " == null || " + b + " === false ? " + b + " : " + this.nameLookup(b, a, "context")
                    })
                },
                lookupData: function() {
                    this.pushStackLiteral("data")
                },
                pushStringParam: function(a, b) {
                    this.pushStackLiteral("depth" + this.lastContext), this.pushString(b), "sexpr" !== b && ("string" == typeof a ? this.pushString(a) : this.pushStackLiteral(a))
                },
                emptyHash: function() {
                    this.pushStackLiteral("{}"), this.options.stringParams && (this.push("{}"), this.push("{}"))
                },
                pushHash: function() {
                    this.hash && this.hashes.push(this.hash), this.hash = {
                        values: [],
                        types: [],
                        contexts: []
                    }
                },
                popHash: function() {
                    var a = this.hash;
                    this.hash = this.hashes.pop(), this.options.stringParams && (this.push("{" + a.contexts.join(",") + "}"), this.push("{" + a.types.join(",") + "}")), this.push("{\n    " + a.values.join(",\n    ") + "\n  }")
                },
                pushString: function(a) {
                    this.pushStackLiteral(this.quotedString(a))
                },
                push: function(a) {
                    return this.inlineStack.push(a), a
                },
                pushLiteral: function(a) {
                    this.pushStackLiteral(a)
                },
                pushProgram: function(a) {
                    null != a ? this.pushStackLiteral(this.programExpression(a)) : this.pushStackLiteral(null)
                },
                invokeHelper: function(a, b, c) {
                    this.context.aliases.helperMissing = "helpers.helperMissing", this.useRegister("helper");
                    var d = this.lastHelper = this.setupHelper(a, b, !0),
                        e = this.nameLookup("depth" + this.lastContext, b, "context"),
                        f = "helper = " + d.name + " || " + e;
                    d.paramsInit && (f += "," + d.paramsInit), this.push("(" + f + ",helper " + "? helper.call(" + d.callParams + ") " + ": helperMissing.call(" + d.helperMissingParams + "))"), c || this.flushInline()
                },
                invokeKnownHelper: function(a, b) {
                    var c = this.setupHelper(a, b);
                    this.push(c.name + ".call(" + c.callParams + ")")
                },
                invokeAmbiguous: function(a, b) {
                    this.context.aliases.functionType = '"function"', this.useRegister("helper"), this.emptyHash();
                    var c = this.setupHelper(0, a, b),
                        d = this.lastHelper = this.nameLookup("helpers", a, "helper"),
                        e = this.nameLookup("depth" + this.lastContext, a, "context"),
                        f = this.nextStack();
                    c.paramsInit && this.pushSource(c.paramsInit), this.pushSource("if (helper = " + d + ") { " + f + " = helper.call(" + c.callParams + "); }"), this.pushSource("else { helper = " + e + "; " + f + " = typeof helper === functionType ? helper.call(" + c.callParams + ") : helper; }")
                },
                invokePartial: function(a) {
                    var b = [this.nameLookup("partials", a, "partial"), "'" + a + "'", this.popStack(), "helpers", "partials"];
                    this.options.data && b.push("data"), this.context.aliases.self = "this", this.push("self.invokePartial(" + b.join(", ") + ")")
                },
                assignToHash: function(a) {
                    var b, c, d = this.popStack();
                    this.options.stringParams && (c = this.popStack(), b = this.popStack());
                    var e = this.hash;
                    b && e.contexts.push("'" + a + "': " + b), c && e.types.push("'" + a + "': " + c), e.values.push("'" + a + "': (" + d + ")")
                },
                compiler: d,
                compileChildren: function(a, b) {
                    for (var c, d, e = a.children, f = 0, g = e.length; g > f; f++) {
                        c = e[f], d = new this.compiler;
                        var h = this.matchExistingProgram(c);
                        null == h ? (this.context.programs.push(""), h = this.context.programs.length, c.index = h, c.name = "program" + h, this.context.programs[h] = d.compile(c, b, this.context), this.context.environments[h] = c) : (c.index = h, c.name = "program" + h)
                    }
                },
                matchExistingProgram: function(a) {
                    for (var b = 0, c = this.context.environments.length; c > b; b++) {
                        var d = this.context.environments[b];
                        if (d && d.equals(a)) return b
                    }
                },
                programExpression: function(a) {
                    if (this.context.aliases.self = "this", null == a) return "self.noop";
                    for (var b, c = this.environment.children[a], d = c.depths.list, e = [c.index, c.name, "data"], f = 0, g = d.length; g > f; f++) b = d[f], 1 === b ? e.push("depth0") : e.push("depth" + (b - 1));
                    return (0 === d.length ? "self.program(" : "self.programWithDepth(") + e.join(", ") + ")"
                },
                register: function(a, b) {
                    this.useRegister(a), this.pushSource(a + " = " + b + ";")
                },
                useRegister: function(a) {
                    this.registers[a] || (this.registers[a] = !0, this.registers.list.push(a))
                },
                pushStackLiteral: function(a) {
                    return this.push(new c(a))
                },
                pushSource: function(a) {
                    this.pendingContent && (this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent))), this.pendingContent = void 0), a && this.source.push(a)
                },
                pushStack: function(a) {
                    this.flushInline();
                    var b = this.incrStack();
                    return a && this.pushSource(b + " = " + a + ";"), this.compileStack.push(b), b
                },
                replaceStack: function(a) {
                    var b, d, e, f = "",
                        g = this.isInline();
                    if (g) {
                        var h = this.popStack(!0);
                        if (h instanceof c) b = h.value, e = !0;
                        else {
                            d = !this.stackSlot;
                            var i = d ? this.incrStack() : this.topStackName();
                            f = "(" + this.push(i) + " = " + h + "),", b = this.topStack()
                        }
                    } else b = this.topStack();
                    var j = a.call(this, b);
                    return g ? (e || this.popStack(), d && this.stackSlot--, this.push("(" + f + j + ")")) : (/^stack/.test(b) || (b = this.nextStack()), this.pushSource(b + " = (" + f + j + ");")), b
                },
                nextStack: function() {
                    return this.pushStack()
                },
                incrStack: function() {
                    return this.stackSlot++, this.stackSlot > this.stackVars.length && this.stackVars.push("stack" + this.stackSlot), this.topStackName()
                },
                topStackName: function() {
                    return "stack" + this.stackSlot
                },
                flushInline: function() {
                    var a = this.inlineStack;
                    if (a.length) {
                        this.inlineStack = [];
                        for (var b = 0, d = a.length; d > b; b++) {
                            var e = a[b];
                            e instanceof c ? this.compileStack.push(e) : this.pushStack(e)
                        }
                    }
                },
                isInline: function() {
                    return this.inlineStack.length
                },
                popStack: function(a) {
                    var b = this.isInline(),
                        d = (b ? this.inlineStack : this.compileStack).pop();
                    if (!a && d instanceof c) return d.value;
                    if (!b) {
                        if (!this.stackSlot) throw new i("Invalid stack pop");
                        this.stackSlot--
                    }
                    return d
                },
                topStack: function(a) {
                    var b = this.isInline() ? this.inlineStack : this.compileStack,
                        d = b[b.length - 1];
                    return !a && d instanceof c ? d.value : d
                },
                quotedString: function(a) {
                    return '"' + a.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029") + '"'
                },
                setupHelper: function(a, b, c) {
                    var d = [],
                        e = this.setupParams(a, d, c),
                        f = this.nameLookup("helpers", b, "helper");
                    return {
                        params: d,
                        paramsInit: e,
                        name: f,
                        callParams: ["depth0"].concat(d).join(", "),
                        helperMissingParams: c && ["depth0", this.quotedString(b)].concat(d).join(", ")
                    }
                },
                setupOptions: function(a, b) {
                    var c, d, e, f = [],
                        g = [],
                        h = [];
                    f.push("hash:" + this.popStack()), this.options.stringParams && (f.push("hashTypes:" + this.popStack()), f.push("hashContexts:" + this.popStack())), d = this.popStack(), e = this.popStack(), (e || d) && (e || (this.context.aliases.self = "this", e = "self.noop"), d || (this.context.aliases.self = "this", d = "self.noop"), f.push("inverse:" + d), f.push("fn:" + e));
                    for (var i = 0; a > i; i++) c = this.popStack(), b.push(c), this.options.stringParams && (h.push(this.popStack()), g.push(this.popStack()));
                    return this.options.stringParams && (f.push("contexts:[" + g.join(",") + "]"), f.push("types:[" + h.join(",") + "]")), this.options.data && f.push("data:data"), f
                },
                setupParams: function(a, b, c) {
                    var d = "{" + this.setupOptions(a, b).join(",") + "}";
                    return c ? (this.useRegister("options"), b.push("options"), "options=" + d) : (b.push(d), "")
                }
            };
            for (var j = "break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield".split(" "), k = d.RESERVED_WORDS = {}, l = 0, m = j.length; m > l; l++) k[j[l]] = !0;
            return d.isValidJavaScriptVariableName = function(a) {
                return !d.RESERVED_WORDS[a] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a) ? !0 : !1
            }, e = d
        }(d, c),
        l = function(a, b, c, d, e) {
            "use strict";
            var f, g = a,
                h = b,
                i = c.parser,
                j = c.parse,
                k = d.Compiler,
                l = d.compile,
                m = d.precompile,
                n = e,
                o = g.create,
                p = function() {
                    var a = o();
                    return a.compile = function(b, c) {
                        return l(b, c, a)
                    }, a.precompile = function(b, c) {
                        return m(b, c, a)
                    }, a.AST = h, a.Compiler = k, a.JavaScriptCompiler = n, a.Parser = i, a.parse = j, a
                };
            return g = p(), g.create = p, f = g
        }(f, g, i, j, k);
    return l
}();
! function(a, b) {
    if ("function" == typeof define && define.amd) define(["underscore", "jquery", "exports"], function(c, d, e) {
        a.Backbone = b(a, e, c, d)
    });
    else if ("undefined" != typeof exports) {
        var c = require("underscore");
        b(a, exports, c)
    } else a.Backbone = b(a, {}, a._, a.jQuery || a.Zepto || a.ender || a.$)
}(this, function(a, b, c, d) {
    var e = a.Backbone,
        f = [];
    f.push;
    var g = f.slice;
    f.splice, b.VERSION = "1.1.2", b.$ = d, b.noConflict = function() {
        return a.Backbone = e, this
    }, b.emulateHTTP = !1, b.emulateJSON = !1;
    var h = b.Events = {
            on: function(a, b, c) {
                if (!j(this, "on", a, [b, c]) || !b) return this;
                this._events || (this._events = {});
                var d = this._events[a] || (this._events[a] = []);
                return d.push({
                    callback: b,
                    context: c,
                    ctx: c || this
                }), this
            },
            once: function(a, b, d) {
                if (!j(this, "once", a, [b, d]) || !b) return this;
                var e = this,
                    f = c.once(function() {
                        e.off(a, f), b.apply(this, arguments)
                    });
                return f._callback = b, this.on(a, f, d)
            },
            off: function(a, b, d) {
                var e, f, g, h, i, k, l, m;
                if (!this._events || !j(this, "off", a, [b, d])) return this;
                if (!a && !b && !d) return this._events = void 0, this;
                for (h = a ? [a] : c.keys(this._events), i = 0, k = h.length; k > i; i++)
                    if (a = h[i], g = this._events[a]) {
                        if (this._events[a] = e = [], b || d)
                            for (l = 0, m = g.length; m > l; l++) f = g[l], (b && b !== f.callback && b !== f.callback._callback || d && d !== f.context) && e.push(f);
                        e.length || delete this._events[a]
                    }
                return this
            },
            trigger: function(a) {
                if (!this._events) return this;
                var b = g.call(arguments, 1);
                if (!j(this, "trigger", a, b)) return this;
                var c = this._events[a],
                    d = this._events.all;
                return c && k(c, b), d && k(d, arguments), this
            },
            stopListening: function(a, b, d) {
                var e = this._listeningTo;
                if (!e) return this;
                var f = !b && !d;
                d || "object" != typeof b || (d = this), a && ((e = {})[a._listenId] = a);
                for (var g in e) a = e[g], a.off(b, d, this), (f || c.isEmpty(a._events)) && delete this._listeningTo[g];
                return this
            }
        },
        i = /\s+/,
        j = function(a, b, c, d) {
            if (!c) return !0;
            if ("object" == typeof c) {
                for (var e in c) a[b].apply(a, [e, c[e]].concat(d));
                return !1
            }
            if (i.test(c)) {
                for (var f = c.split(i), g = 0, h = f.length; h > g; g++) a[b].apply(a, [f[g]].concat(d));
                return !1
            }
            return !0
        },
        k = function(a, b) {
            var c, d = -1,
                e = a.length,
                f = b[0],
                g = b[1],
                h = b[2];
            switch (b.length) {
                case 0:
                    for (; ++d < e;)(c = a[d]).callback.call(c.ctx);
                    return;
                case 1:
                    for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f);
                    return;
                case 2:
                    for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f, g);
                    return;
                case 3:
                    for (; ++d < e;)(c = a[d]).callback.call(c.ctx, f, g, h);
                    return;
                default:
                    for (; ++d < e;)(c = a[d]).callback.apply(c.ctx, b);
                    return
            }
        },
        l = {
            listenTo: "on",
            listenToOnce: "once"
        };
    c.each(l, function(a, b) {
        h[b] = function(b, d, e) {
            var f = this._listeningTo || (this._listeningTo = {}),
                g = b._listenId || (b._listenId = c.uniqueId("l"));
            return f[g] = b, e || "object" != typeof d || (e = this), b[a](d, e, this), this
        }
    }), h.bind = h.on, h.unbind = h.off, c.extend(b, h);
    var m = b.Model = function(a, b) {
        var d = a || {};
        b || (b = {}), this.cid = c.uniqueId("c"), this.attributes = {}, b.collection && (this.collection = b.collection), b.parse && (d = this.parse(d, b) || {}), d = c.defaults({}, d, c.result(this, "defaults")), this.set(d, b), this.changed = {}, this.initialize.apply(this, arguments)
    };
    c.extend(m.prototype, h, {
        changed: null,
        validationError: null,
        idAttribute: "id",
        initialize: function() {},
        toJSON: function() {
            return c.clone(this.attributes)
        },
        sync: function() {
            return b.sync.apply(this, arguments)
        },
        get: function(a) {
            return this.attributes[a]
        },
        escape: function(a) {
            return c.escape(this.get(a))
        },
        has: function(a) {
            return null != this.get(a)
        },
        set: function(a, b, d) {
            var e, f, g, h, i, j, k, l;
            if (null == a) return this;
            if ("object" == typeof a ? (f = a, d = b) : (f = {})[a] = b, d || (d = {}), !this._validate(f, d)) return !1;
            g = d.unset, i = d.silent, h = [], j = this._changing, this._changing = !0, j || (this._previousAttributes = c.clone(this.attributes), this.changed = {}), l = this.attributes, k = this._previousAttributes, this.idAttribute in f && (this.id = f[this.idAttribute]);
            for (e in f) b = f[e], c.isEqual(l[e], b) || h.push(e), c.isEqual(k[e], b) ? delete this.changed[e] : this.changed[e] = b, g ? delete l[e] : l[e] = b;
            if (!i) {
                h.length && (this._pending = d);
                for (var m = 0, n = h.length; n > m; m++) this.trigger("change:" + h[m], this, l[h[m]], d)
            }
            if (j) return this;
            if (!i)
                for (; this._pending;) d = this._pending, this._pending = !1, this.trigger("change", this, d);
            return this._pending = !1, this._changing = !1, this
        },
        unset: function(a, b) {
            return this.set(a, void 0, c.extend({}, b, {
                unset: !0
            }))
        },
        clear: function(a) {
            var b = {};
            for (var d in this.attributes) b[d] = void 0;
            return this.set(b, c.extend({}, a, {
                unset: !0
            }))
        },
        hasChanged: function(a) {
            return null == a ? !c.isEmpty(this.changed) : c.has(this.changed, a)
        },
        changedAttributes: function(a) {
            if (!a) return this.hasChanged() ? c.clone(this.changed) : !1;
            var b, d = !1,
                e = this._changing ? this._previousAttributes : this.attributes;
            for (var f in a) c.isEqual(e[f], b = a[f]) || ((d || (d = {}))[f] = b);
            return d
        },
        previous: function(a) {
            return null != a && this._previousAttributes ? this._previousAttributes[a] : null
        },
        previousAttributes: function() {
            return c.clone(this._previousAttributes)
        },
        fetch: function(a) {
            a = a ? c.clone(a) : {}, void 0 === a.parse && (a.parse = !0);
            var b = this,
                d = a.success;
            return a.success = function(c) {
                return b.set(b.parse(c, a), a) ? (d && d(b, c, a), b.trigger("sync", b, c, a), void 0) : !1
            }, L(this, a), this.sync("read", this, a)
        },
        save: function(a, b, d) {
            var e, f, g, h = this.attributes;
            if (null == a || "object" == typeof a ? (e = a, d = b) : (e = {})[a] = b, d = c.extend({
                    validate: !0
                }, d), e && !d.wait) {
                if (!this.set(e, d)) return !1
            } else if (!this._validate(e, d)) return !1;
            e && d.wait && (this.attributes = c.extend({}, h, e)), void 0 === d.parse && (d.parse = !0);
            var i = this,
                j = d.success;
            return d.success = function(a) {
                i.attributes = h;
                var b = i.parse(a, d);
                return d.wait && (b = c.extend(e || {}, b)), c.isObject(b) && !i.set(b, d) ? !1 : (j && j(i, a, d), i.trigger("sync", i, a, d), void 0)
            }, L(this, d), f = this.isNew() ? "create" : d.patch ? "patch" : "update", "patch" === f && (d.attrs = e), g = this.sync(f, this, d), e && d.wait && (this.attributes = h), g
        },
        destroy: function(a) {
            a = a ? c.clone(a) : {};
            var b = this,
                d = a.success,
                e = function() {
                    b.trigger("destroy", b, b.collection, a)
                };
            if (a.success = function(c) {
                    (a.wait || b.isNew()) && e(), d && d(b, c, a), b.isNew() || b.trigger("sync", b, c, a)
                }, this.isNew()) return a.success(), !1;
            L(this, a);
            var f = this.sync("delete", this, a);
            return a.wait || e(), f
        },
        url: function() {
            var a = c.result(this, "urlRoot") || c.result(this.collection, "url") || K();
            return this.isNew() ? a : a.replace(/([^\/])$/, "$1/") + encodeURIComponent(this.id)
        },
        parse: function(a) {
            return a
        },
        clone: function() {
            return new this.constructor(this.attributes)
        },
        isNew: function() {
            return !this.has(this.idAttribute)
        },
        isValid: function(a) {
            return this._validate({}, c.extend(a || {}, {
                validate: !0
            }))
        },
        _validate: function(a, b) {
            if (!b.validate || !this.validate) return !0;
            a = c.extend({}, this.attributes, a);
            var d = this.validationError = this.validate(a, b) || null;
            return d ? (this.trigger("invalid", this, d, c.extend(b, {
                validationError: d
            })), !1) : !0
        }
    });
    var n = ["keys", "values", "pairs", "invert", "pick", "omit"];
    c.each(n, function(a) {
        m.prototype[a] = function() {
            var b = g.call(arguments);
            return b.unshift(this.attributes), c[a].apply(c, b)
        }
    });
    var o = b.Collection = function(a, b) {
            b || (b = {}), b.model && (this.model = b.model), void 0 !== b.comparator && (this.comparator = b.comparator), this._reset(), this.initialize.apply(this, arguments), a && this.reset(a, c.extend({
                silent: !0
            }, b))
        },
        p = {
            add: !0,
            remove: !0,
            merge: !0
        },
        q = {
            add: !0,
            remove: !1
        };
    c.extend(o.prototype, h, {
        model: m,
        initialize: function() {},
        toJSON: function(a) {
            return this.map(function(b) {
                return b.toJSON(a)
            })
        },
        sync: function() {
            return b.sync.apply(this, arguments)
        },
        add: function(a, b) {
            return this.set(a, c.extend({
                merge: !1
            }, b, q))
        },
        remove: function(a, b) {
            var d = !c.isArray(a);
            a = d ? [a] : c.clone(a), b || (b = {});
            var e, f, g, h;
            for (e = 0, f = a.length; f > e; e++) h = a[e] = this.get(a[e]), h && (delete this._byId[h.id], delete this._byId[h.cid], g = this.indexOf(h), this.models.splice(g, 1), this.length--, b.silent || (b.index = g, h.trigger("remove", h, this, b)), this._removeReference(h, b));
            return d ? a[0] : a
        },
        set: function(a, b) {
            b = c.defaults({}, b, p), b.parse && (a = this.parse(a, b));
            var d = !c.isArray(a);
            a = d ? a ? [a] : [] : c.clone(a);
            var e, f, g, h, i, j, k, l = b.at,
                n = this.model,
                o = this.comparator && null == l && b.sort !== !1,
                q = c.isString(this.comparator) ? this.comparator : null,
                r = [],
                s = [],
                t = {},
                u = b.add,
                v = b.merge,
                w = b.remove,
                x = !o && u && w ? [] : !1;
            for (e = 0, f = a.length; f > e; e++) {
                if (i = a[e] || {}, g = i instanceof m ? h = i : i[n.prototype.idAttribute || "id"], j = this.get(g)) w && (t[j.cid] = !0), v && (i = i === h ? h.attributes : i, b.parse && (i = j.parse(i, b)), j.set(i, b), o && !k && j.hasChanged(q) && (k = !0)), a[e] = j;
                else if (u) {
                    if (h = a[e] = this._prepareModel(i, b), !h) continue;
                    r.push(h), this._addReference(h, b)
                }
                h = j || h, !x || !h.isNew() && t[h.id] || x.push(h), t[h.id] = !0
            }
            if (w) {
                for (e = 0, f = this.length; f > e; ++e) t[(h = this.models[e]).cid] || s.push(h);
                s.length && this.remove(s, b)
            }
            if (r.length || x && x.length)
                if (o && (k = !0), this.length += r.length, null != l)
                    for (e = 0, f = r.length; f > e; e++) this.models.splice(l + e, 0, r[e]);
                else {
                    x && (this.models.length = 0);
                    var y = x || r;
                    for (e = 0, f = y.length; f > e; e++) this.models.push(y[e])
                }
            if (k && this.sort({
                    silent: !0
                }), !b.silent) {
                for (e = 0, f = r.length; f > e; e++)(h = r[e]).trigger("add", h, this, b);
                (k || x && x.length) && this.trigger("sort", this, b)
            }
            return d ? a[0] : a
        },
        reset: function(a, b) {
            b || (b = {});
            for (var d = 0, e = this.models.length; e > d; d++) this._removeReference(this.models[d], b);
            return b.previousModels = this.models, this._reset(), a = this.add(a, c.extend({
                silent: !0
            }, b)), b.silent || this.trigger("reset", this, b), a
        },
        push: function(a, b) {
            return this.add(a, c.extend({
                at: this.length
            }, b))
        },
        pop: function(a) {
            var b = this.at(this.length - 1);
            return this.remove(b, a), b
        },
        unshift: function(a, b) {
            return this.add(a, c.extend({
                at: 0
            }, b))
        },
        shift: function(a) {
            var b = this.at(0);
            return this.remove(b, a), b
        },
        slice: function() {
            return g.apply(this.models, arguments)
        },
        get: function(a) {
            return null == a ? void 0 : this._byId[a] || this._byId[a.id] || this._byId[a.cid]
        },
        at: function(a) {
            return this.models[a]
        },
        where: function(a, b) {
            return c.isEmpty(a) ? b ? void 0 : [] : this[b ? "find" : "filter"](function(b) {
                for (var c in a)
                    if (a[c] !== b.get(c)) return !1;
                return !0
            })
        },
        findWhere: function(a) {
            return this.where(a, !0)
        },
        sort: function(a) {
            if (!this.comparator) throw new Error("Cannot sort a set without a comparator");
            return a || (a = {}), c.isString(this.comparator) || 1 === this.comparator.length ? this.models = this.sortBy(this.comparator, this) : this.models.sort(c.bind(this.comparator, this)), a.silent || this.trigger("sort", this, a), this
        },
        pluck: function(a) {
            return c.invoke(this.models, "get", a)
        },
        fetch: function(a) {
            a = a ? c.clone(a) : {}, void 0 === a.parse && (a.parse = !0);
            var b = a.success,
                d = this;
            return a.success = function(c) {
                var e = a.reset ? "reset" : "set";
                d[e](c, a), b && b(d, c, a), d.trigger("sync", d, c, a)
            }, L(this, a), this.sync("read", this, a)
        },
        create: function(a, b) {
            if (b = b ? c.clone(b) : {}, !(a = this._prepareModel(a, b))) return !1;
            b.wait || this.add(a, b);
            var d = this,
                e = b.success;
            return b.success = function(a, c) {
                b.wait && d.add(a, b), e && e(a, c, b)
            }, a.save(null, b), a
        },
        parse: function(a) {
            return a
        },
        clone: function() {
            return new this.constructor(this.models)
        },
        _reset: function() {
            this.length = 0, this.models = [], this._byId = {}
        },
        _prepareModel: function(a, b) {
            if (a instanceof m) return a;
            b = b ? c.clone(b) : {}, b.collection = this;
            var d = new this.model(a, b);
            return d.validationError ? (this.trigger("invalid", this, d.validationError, b), !1) : d
        },
        _addReference: function(a) {
            this._byId[a.cid] = a, null != a.id && (this._byId[a.id] = a), a.collection || (a.collection = this), a.on("all", this._onModelEvent, this)
        },
        _removeReference: function(a) {
            this === a.collection && delete a.collection, a.off("all", this._onModelEvent, this)
        },
        _onModelEvent: function(a, b, c, d) {
            ("add" !== a && "remove" !== a || c === this) && ("destroy" === a && this.remove(b, d), b && a === "change:" + b.idAttribute && (delete this._byId[b.previous(b.idAttribute)], null != b.id && (this._byId[b.id] = b)), this.trigger.apply(this, arguments))
        }
    });
    var r = ["forEach", "each", "map", "collect", "reduce", "foldl", "inject", "reduceRight", "foldr", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "max", "min", "toArray", "size", "first", "head", "take", "initial", "rest", "tail", "drop", "last", "without", "difference", "indexOf", "shuffle", "lastIndexOf", "isEmpty", "chain", "sample"];
    c.each(r, function(a) {
        o.prototype[a] = function() {
            var b = g.call(arguments);
            return b.unshift(this.models), c[a].apply(c, b)
        }
    });
    var s = ["groupBy", "countBy", "sortBy", "indexBy"];
    c.each(s, function(a) {
        o.prototype[a] = function(b, d) {
            var e = c.isFunction(b) ? b : function(a) {
                return a.get(b)
            };
            return c[a](this.models, e, d)
        }
    });
    var t = b.View = function(a) {
            this.cid = c.uniqueId("view"), a || (a = {}), c.extend(this, c.pick(a, v)), this._ensureElement(), this.initialize.apply(this, arguments), this.delegateEvents()
        },
        u = /^(\S+)\s*(.*)$/,
        v = ["model", "collection", "el", "id", "attributes", "className", "tagName", "events"];
    c.extend(t.prototype, h, {
        tagName: "div",
        $: function(a) {
            return this.$el.find(a)
        },
        initialize: function() {},
        render: function() {
            return this
        },
        remove: function() {
            return this.$el.remove(), this.stopListening(), this
        },
        setElement: function(a, c) {
            return this.$el && this.undelegateEvents(), this.$el = a instanceof b.$ ? a : b.$(a), this.el = this.$el[0], c !== !1 && this.delegateEvents(), this
        },
        delegateEvents: function(a) {
            if (!a && !(a = c.result(this, "events"))) return this;
            this.undelegateEvents();
            for (var b in a) {
                var d = a[b];
                if (c.isFunction(d) || (d = this[a[b]]), d) {
                    var e = b.match(u),
                        f = e[1],
                        g = e[2];
                    d = c.bind(d, this), f += ".delegateEvents" + this.cid, "" === g ? this.$el.on(f, d) : this.$el.on(f, g, d)
                }
            }
            return this
        },
        undelegateEvents: function() {
            return this.$el.off(".delegateEvents" + this.cid), this
        },
        _ensureElement: function() {
            if (this.el) this.setElement(c.result(this, "el"), !1);
            else {
                var a = c.extend({}, c.result(this, "attributes"));
                this.id && (a.id = c.result(this, "id")), this.className && (a["class"] = c.result(this, "className"));
                var d = b.$("<" + c.result(this, "tagName") + ">").attr(a);
                this.setElement(d, !1)
            }
        }
    }), b.sync = function(a, d, e) {
        var f = x[a];
        c.defaults(e || (e = {}), {
            emulateHTTP: b.emulateHTTP,
            emulateJSON: b.emulateJSON
        });
        var g = {
            type: f,
            dataType: "json"
        };
        if (e.url || (g.url = c.result(d, "url") || K()), null != e.data || !d || "create" !== a && "update" !== a && "patch" !== a || (g.contentType = "application/json", g.data = JSON.stringify(e.attrs || d.toJSON(e))), e.emulateJSON && (g.contentType = "application/x-www-form-urlencoded", g.data = g.data ? {
                model: g.data
            } : {}), e.emulateHTTP && ("PUT" === f || "DELETE" === f || "PATCH" === f)) {
            g.type = "POST", e.emulateJSON && (g.data._method = f);
            var h = e.beforeSend;
            e.beforeSend = function(a) {
                return a.setRequestHeader("X-HTTP-Method-Override", f), h ? h.apply(this, arguments) : void 0
            }
        }
        "GET" === g.type || e.emulateJSON || (g.processData = !1), "PATCH" === g.type && w && (g.xhr = function() {
            return new ActiveXObject("Microsoft.XMLHTTP")
        });
        var i = e.xhr = b.ajax(c.extend(g, e));
        return d.trigger("request", d, i, e), i
    };
    var w = !("undefined" == typeof window || !window.ActiveXObject || window.XMLHttpRequest && (new XMLHttpRequest).dispatchEvent),
        x = {
            create: "POST",
            update: "PUT",
            patch: "PATCH",
            "delete": "DELETE",
            read: "GET"
        };
    b.ajax = function() {
        return b.$.ajax.apply(b.$, arguments)
    };
    var y = b.Router = function(a) {
            a || (a = {}), a.routes && (this.routes = a.routes), this._bindRoutes(), this.initialize.apply(this, arguments)
        },
        z = /\((.*?)\)/g,
        A = /(\(\?)?:\w+/g,
        B = /\*\w+/g,
        C = /[\-{}\[\]+?.,\\\^$|#\s]/g;
    c.extend(y.prototype, h, {
        initialize: function() {},
        route: function(a, d, e) {
            c.isRegExp(a) || (a = this._routeToRegExp(a)), c.isFunction(d) && (e = d, d = ""), e || (e = this[d]);
            var f = this;
            return b.history.route(a, function(c) {
                var g = f._extractParameters(a, c);
                f.execute(e, g), f.trigger.apply(f, ["route:" + d].concat(g)), f.trigger("route", d, g), b.history.trigger("route", f, d, g)
            }), this
        },
        execute: function(a, b) {
            a && a.apply(this, b)
        },
        navigate: function(a, c) {
            return b.history.navigate(a, c), this
        },
        _bindRoutes: function() {
            if (this.routes) {
                this.routes = c.result(this, "routes");
                for (var a, b = c.keys(this.routes); null != (a = b.pop());) this.route(a, this.routes[a])
            }
        },
        _routeToRegExp: function(a) {
            return a = a.replace(C, "\\$&").replace(z, "(?:$1)?").replace(A, function(a, b) {
                return b ? a : "([^/?]+)"
            }).replace(B, "([^?]*?)"), new RegExp("^" + a + "(?:\\?([\\s\\S]*))?$")
        },
        _extractParameters: function(a, b) {
            var d = a.exec(b).slice(1);
            return c.map(d, function(a, b) {
                return b === d.length - 1 ? a || null : a ? decodeURIComponent(a) : null
            })
        }
    });
    var D = b.History = function() {
            this.handlers = [], c.bindAll(this, "checkUrl"), "undefined" != typeof window && (this.location = window.location, this.history = window.history)
        },
        E = /^[#\/]|\s+$/g,
        F = /^\/+|\/+$/g,
        G = /msie [\w.]+/,
        H = /\/$/,
        I = /#.*$/;
    D.started = !1, c.extend(D.prototype, h, {
        interval: 50,
        atRoot: function() {
            return this.location.pathname.replace(/[^\/]$/, "$&/") === this.root
        },
        getHash: function(a) {
            var b = (a || this).location.href.match(/#(.*)$/);
            return b ? b[1] : ""
        },
        getFragment: function(a, b) {
            if (null == a)
                if (this._hasPushState || !this._wantsHashChange || b) {
                    a = decodeURI(this.location.pathname + this.location.search);
                    var c = this.root.replace(H, "");
                    a.indexOf(c) || (a = a.slice(c.length))
                } else a = this.getHash();
            return a.replace(E, "")
        },
        start: function(a) {
            if (D.started) throw new Error("Backbone.history has already been started");
            D.started = !0, this.options = c.extend({
                root: "/"
            }, this.options, a), this.root = this.options.root, this._wantsHashChange = this.options.hashChange !== !1, this._wantsPushState = !!this.options.pushState, this._hasPushState = !!(this.options.pushState && this.history && this.history.pushState);
            var d = this.getFragment(),
                e = document.documentMode,
                f = G.exec(navigator.userAgent.toLowerCase()) && (!e || 7 >= e);
            if (this.root = ("/" + this.root + "/").replace(F, "/"), f && this._wantsHashChange) {
                var g = b.$('<iframe src="javascript:0" tabindex="-1">');
                this.iframe = g.hide().appendTo("body")[0].contentWindow, this.navigate(d)
            }
            this._hasPushState ? b.$(window).on("popstate", this.checkUrl) : this._wantsHashChange && "onhashchange" in window && !f ? b.$(window).on("hashchange", this.checkUrl) : this._wantsHashChange && (this._checkUrlInterval = setInterval(this.checkUrl, this.interval)), this.fragment = d;
            var h = this.location;
            if (this._wantsHashChange && this._wantsPushState) {
                if (!this._hasPushState && !this.atRoot()) return this.fragment = this.getFragment(null, !0), this.location.replace(this.root + "#" + this.fragment), !0;
                this._hasPushState && this.atRoot() && h.hash && (this.fragment = this.getHash().replace(E, ""), this.history.replaceState({}, document.title, this.root + this.fragment))
            }
            return this.options.silent ? void 0 : this.loadUrl()
        },
        stop: function() {
            b.$(window).off("popstate", this.checkUrl).off("hashchange", this.checkUrl), this._checkUrlInterval && clearInterval(this._checkUrlInterval), D.started = !1
        },
        route: function(a, b) {
            this.handlers.unshift({
                route: a,
                callback: b
            })
        },
        checkUrl: function() {
            var a = this.getFragment();
            return a === this.fragment && this.iframe && (a = this.getFragment(this.getHash(this.iframe))), a === this.fragment ? !1 : (this.iframe && this.navigate(a), this.loadUrl(), void 0)
        },
        loadUrl: function(a) {
            return a = this.fragment = this.getFragment(a), c.any(this.handlers, function(b) {
                return b.route.test(a) ? (b.callback(a), !0) : void 0
            })
        },
        navigate: function(a, b) {
            if (!D.started) return !1;
            b && b !== !0 || (b = {
                trigger: !!b
            });
            var c = this.root + (a = this.getFragment(a || ""));
            if (a = a.replace(I, ""), this.fragment !== a) {
                if (this.fragment = a, "" === a && "/" !== c && (c = c.slice(0, -1)), this._hasPushState) this.history[b.replace ? "replaceState" : "pushState"]({}, document.title, c);
                else {
                    if (!this._wantsHashChange) return this.location.assign(c);
                    this._updateHash(this.location, a, b.replace), this.iframe && a !== this.getFragment(this.getHash(this.iframe)) && (b.replace || this.iframe.document.open().close(), this._updateHash(this.iframe.location, a, b.replace))
                }
                return b.trigger ? this.loadUrl(a) : void 0
            }
        },
        _updateHash: function(a, b, c) {
            if (c) {
                var d = a.href.replace(/(javascript:|#).*$/, "");
                a.replace(d + "#" + b)
            } else a.hash = "#" + b
        }
    }), b.history = new D;
    var J = function(a, b) {
        var d, e = this;
        d = a && c.has(a, "constructor") ? a.constructor : function() {
            return e.apply(this, arguments)
        }, c.extend(d, e, b);
        var f = function() {
            this.constructor = d
        };
        return f.prototype = e.prototype, d.prototype = new f, a && c.extend(d.prototype, a), d.__super__ = e.prototype, d
    };
    m.extend = o.extend = y.extend = t.extend = D.extend = J;
    var K = function() {
            throw new Error('A "url" property or function must be specified')
        },
        L = function(a, b) {
            var c = b.error;
            b.error = function(d) {
                c && c(a, d, b), a.trigger("error", a, d, b)
            }
        };
    return b
}), Backbone.ChildViewContainer = function(a, b) {
    var c = function(a) {
        this._views = {}, this._indexByModel = {}, this._indexByCustom = {}, this._updateLength(), b.each(a, this.add, this)
    };
    b.extend(c.prototype, {
        add: function(a, b) {
            var c = a.cid;
            return this._views[c] = a, a.model && (this._indexByModel[a.model.cid] = c), b && (this._indexByCustom[b] = c), this._updateLength(), this
        },
        findByModel: function(a) {
            return this.findByModelCid(a.cid)
        },
        findByModelCid: function(a) {
            var b = this._indexByModel[a];
            return this.findByCid(b)
        },
        findByCustom: function(a) {
            var b = this._indexByCustom[a];
            return this.findByCid(b)
        },
        findByIndex: function(a) {
            return b.values(this._views)[a]
        },
        findByCid: function(a) {
            return this._views[a]
        },
        remove: function(a) {
            var c = a.cid;
            return a.model && delete this._indexByModel[a.model.cid], b.any(this._indexByCustom, function(a, b) {
                return a === c ? (delete this._indexByCustom[b], !0) : void 0
            }, this), delete this._views[c], this._updateLength(), this
        },
        call: function(a) {
            this.apply(a, b.tail(arguments))
        },
        apply: function(a, c) {
            b.each(this._views, function(d) {
                b.isFunction(d[a]) && d[a].apply(d, c || [])
            })
        },
        _updateLength: function() {
            this.length = b.size(this._views)
        }
    });
    var d = ["forEach", "each", "map", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "toArray", "first", "initial", "rest", "last", "without", "isEmpty", "pluck"];
    return b.each(d, function(a) {
        c.prototype[a] = function() {
            var c = b.values(this._views),
                d = [c].concat(b.toArray(arguments));
            return b[a].apply(b, d)
        }
    }), c
}(Backbone, _), Backbone.Wreqr = function(a, b, c) {
    "use strict";
    var d = {};
    return d.Handlers = function(a, b) {
        var c = function(a) {
            this.options = a, this._wreqrHandlers = {}, b.isFunction(this.initialize) && this.initialize(a)
        };
        return c.extend = a.Model.extend, b.extend(c.prototype, a.Events, {
            setHandlers: function(a) {
                b.each(a, function(a, c) {
                    var d = null;
                    b.isObject(a) && !b.isFunction(a) && (d = a.context, a = a.callback), this.setHandler(c, a, d)
                }, this)
            },
            setHandler: function(a, b, c) {
                var d = {
                    callback: b,
                    context: c
                };
                this._wreqrHandlers[a] = d, this.trigger("handler:add", a, b, c)
            },
            hasHandler: function(a) {
                return !!this._wreqrHandlers[a]
            },
            getHandler: function(a) {
                var b = this._wreqrHandlers[a];
                if (!b) throw new Error("Handler not found for '" + a + "'");
                return function() {
                    var a = Array.prototype.slice.apply(arguments);
                    return b.callback.apply(b.context, a)
                }
            },
            removeHandler: function(a) {
                delete this._wreqrHandlers[a]
            },
            removeAllHandlers: function() {
                this._wreqrHandlers = {}
            }
        }), c
    }(a, c), d.CommandStorage = function() {
        var b = function(a) {
            this.options = a, this._commands = {}, c.isFunction(this.initialize) && this.initialize(a)
        };
        return c.extend(b.prototype, a.Events, {
            getCommands: function(a) {
                var b = this._commands[a];
                return b || (b = {
                    command: a,
                    instances: []
                }, this._commands[a] = b), b
            },
            addCommand: function(a, b) {
                var c = this.getCommands(a);
                c.instances.push(b)
            },
            clearCommands: function(a) {
                var b = this.getCommands(a);
                b.instances = []
            }
        }), b
    }(), d.Commands = function(a) {
        return a.Handlers.extend({
            storageType: a.CommandStorage,
            constructor: function(b) {
                this.options = b || {}, this._initializeStorage(this.options), this.on("handler:add", this._executeCommands, this);
                var c = Array.prototype.slice.call(arguments);
                a.Handlers.prototype.constructor.apply(this, c)
            },
            execute: function(a, b) {
                a = arguments[0], b = Array.prototype.slice.call(arguments, 1), this.hasHandler(a) ? this.getHandler(a).apply(this, b) : this.storage.addCommand(a, b)
            },
            _executeCommands: function(a, b, d) {
                var e = this.storage.getCommands(a);
                c.each(e.instances, function(a) {
                    b.apply(d, a)
                }), this.storage.clearCommands(a)
            },
            _initializeStorage: function(a) {
                var b, d = a.storageType || this.storageType;
                b = c.isFunction(d) ? new d : d, this.storage = b
            }
        })
    }(d), d.RequestResponse = function(a) {
        return a.Handlers.extend({
            request: function() {
                var a = arguments[0],
                    b = Array.prototype.slice.call(arguments, 1);
                return this.getHandler(a).apply(this, b)
            }
        })
    }(d), d.EventAggregator = function(a, b) {
        var c = function() {};
        return c.extend = a.Model.extend, b.extend(c.prototype, a.Events), c
    }(a, c), d
}(Backbone, Backbone.Marionette, _);
var Marionette = function(a, b, c) {
    "use strict";

    function d(a, b) {
        var c = new Error(a);
        throw c.name = b || "Error", c
    }
    var e = {};
    b.Marionette = e, e.$ = b.$;
    var f = Array.prototype.slice;
    return e.extend = b.Model.extend, e.getOption = function(a, b) {
            if (a && b) {
                var c;
                return c = a.options && b in a.options && void 0 !== a.options[b] ? a.options[b] : a[b]
            }
        }, e.normalizeMethods = function(a) {
            var b, d = {};
            return c.each(a, function(a, e) {
                b = a, c.isFunction(b) || (b = this[b]), b && (d[e] = b)
            }, this), d
        }, e.normalizeUIKeys = function(a, b) {
            return "undefined" != typeof a ? (c.each(c.keys(a), function(c) {
                var d = /@ui.[a-zA-Z_$0-9]*/g;
                c.match(d) && (a[c.replace(d, function(a) {
                    return b[a.slice(4)]
                })] = a[c], delete a[c])
            }), a) : void 0
        }, e.triggerMethod = function() {
            function a(a, b, c) {
                return c.toUpperCase()
            }
            var b = /(^|:)(\w)/gi,
                d = function(d) {
                    var e = "on" + d.replace(b, a),
                        f = this[e];
                    return c.isFunction(this.trigger) && this.trigger.apply(this, arguments), c.isFunction(f) ? f.apply(this, c.tail(arguments)) : void 0
                };
            return d
        }(), e.MonitorDOMRefresh = function(a) {
            function b(a) {
                a._isShown = !0, e(a)
            }

            function d(a) {
                a._isRendered = !0, e(a)
            }

            function e(a) {
                a._isShown && a._isRendered && f(a) && c.isFunction(a.triggerMethod) && a.triggerMethod("dom:refresh")
            }

            function f(b) {
                return a.contains(b.el)
            }
            return function(a) {
                a.listenTo(a, "show", function() {
                    b(a)
                }), a.listenTo(a, "render", function() {
                    d(a)
                })
            }
        }(document.documentElement),
        function(a) {
            function b(a, b, e, f) {
                var g = f.split(/\s+/);
                c.each(g, function(c) {
                    var f = a[c];
                    f || d("Method '" + c + "' was configured as an event handler, but does not exist."), a.listenTo(b, e, f)
                })
            }

            function e(a, b, c, d) {
                a.listenTo(b, c, d)
            }

            function f(a, b, d, e) {
                var f = e.split(/\s+/);
                c.each(f, function(c) {
                    var e = a[c];
                    a.stopListening(b, d, e)
                })
            }

            function g(a, b, c, d) {
                a.stopListening(b, c, d)
            }

            function h(a, b, d, e, f) {
                b && d && (c.isFunction(d) && (d = d.call(a)), c.each(d, function(d, g) {
                    c.isFunction(d) ? e(a, b, g, d) : f(a, b, g, d)
                }))
            }
            a.bindEntityEvents = function(a, c, d) {
                h(a, c, d, e, b)
            }, a.unbindEntityEvents = function(a, b, c) {
                h(a, b, c, g, f)
            }
        }(e), e.Callbacks = function() {
            this._deferred = e.$.Deferred(), this._callbacks = []
        }, c.extend(e.Callbacks.prototype, {
            add: function(a, b) {
                this._callbacks.push({
                    cb: a,
                    ctx: b
                }), this._deferred.done(function(c, d) {
                    b && (c = b), a.call(c, d)
                })
            },
            run: function(a, b) {
                this._deferred.resolve(b, a)
            },
            reset: function() {
                var a = this._callbacks;
                this._deferred = e.$.Deferred(), this._callbacks = [], c.each(a, function(a) {
                    this.add(a.cb, a.ctx)
                }, this)
            }
        }), e.Controller = function(a) {
            this.triggerMethod = e.triggerMethod, this.options = a || {}, c.isFunction(this.initialize) && this.initialize(this.options)
        }, e.Controller.extend = e.extend, c.extend(e.Controller.prototype, b.Events, {
            close: function() {
                this.stopListening();
                var a = Array.prototype.slice.call(arguments);
                this.triggerMethod.apply(this, ["close"].concat(a)), this.unbind()
            }
        }), e.Region = function(a) {
            if (this.options = a || {}, this.el = e.getOption(this, "el"), this.el || d("An 'el' must be specified for a region.", "NoElError"), this.initialize) {
                var b = Array.prototype.slice.apply(arguments);
                this.initialize.apply(this, b)
            }
        }, c.extend(e.Region, {
            buildRegion: function(a, b) {
                var e = c.isString(a),
                    f = c.isString(a.selector),
                    g = c.isUndefined(a.regionType),
                    h = c.isFunction(a);
                h || e || f || d("Region must be specified as a Region type, a selector string or an object with selector property");
                var i, j;
                e && (i = a), a.selector && (i = a.selector, delete a.selector), h && (j = a), !h && g && (j = b), a.regionType && (j = a.regionType, delete a.regionType), (e || h) && (a = {}), a.el = i;
                var k = new j(a);
                return a.parentEl && (k.getEl = function(b) {
                    var d = a.parentEl;
                    return c.isFunction(d) && (d = d()), d.find(b)
                }), k
            }
        }), c.extend(e.Region.prototype, b.Events, {
            show: function(a) {
                this.ensureEl();
                var b = a.isClosed || c.isUndefined(a.$el),
                    d = a !== this.currentView;
                d && this.close(), a.render(), e.triggerMethod.call(this, "before:show", a), e.triggerMethod.call(a, "before:show"), (d || b) && this.open(a), this.currentView = a, e.triggerMethod.call(this, "show", a), e.triggerMethod.call(a, "show")
            },
            ensureEl: function() {
                this.$el && 0 !== this.$el.length || (this.$el = this.getEl(this.el))
            },
            getEl: function(a) {
                return e.$(a)
            },
            open: function(a) {
                this.$el.empty().append(a.el)
            },
            close: function() {
                var a = this.currentView;
                a && !a.isClosed && (a.close ? a.close() : a.remove && a.remove(), e.triggerMethod.call(this, "close", a), delete this.currentView)
            },
            attachView: function(a) {
                this.currentView = a
            },
            reset: function() {
                this.close(), delete this.$el
            }
        }), e.Region.extend = e.extend, e.RegionManager = function(a) {
            var b = a.Controller.extend({
                    constructor: function(b) {
                        this._regions = {}, a.Controller.prototype.constructor.call(this, b)
                    },
                    addRegions: function(a, b) {
                        var d = {};
                        return c.each(a, function(a, e) {
                            c.isString(a) && (a = {
                                selector: a
                            }), a.selector && (a = c.defaults({}, a, b));
                            var f = this.addRegion(e, a);
                            d[e] = f
                        }, this), d
                    },
                    addRegion: function(b, d) {
                        var e, f = c.isObject(d),
                            g = c.isString(d),
                            h = !!d.selector;
                        return e = g || f && h ? a.Region.buildRegion(d, a.Region) : c.isFunction(d) ? a.Region.buildRegion(d, a.Region) : d, this._store(b, e), this.triggerMethod("region:add", b, e), e
                    },
                    get: function(a) {
                        return this._regions[a]
                    },
                    removeRegion: function(a) {
                        var b = this._regions[a];
                        this._remove(a, b)
                    },
                    removeRegions: function() {
                        c.each(this._regions, function(a, b) {
                            this._remove(b, a)
                        }, this)
                    },
                    closeRegions: function() {
                        c.each(this._regions, function(a) {
                            a.close()
                        }, this)
                    },
                    close: function() {
                        this.removeRegions(), a.Controller.prototype.close.apply(this, arguments)
                    },
                    _store: function(a, b) {
                        this._regions[a] = b, this._setLength()
                    },
                    _remove: function(a, b) {
                        b.close(), delete this._regions[a], this._setLength(), this.triggerMethod("region:remove", a, b)
                    },
                    _setLength: function() {
                        this.length = c.size(this._regions)
                    }
                }),
                d = ["forEach", "each", "map", "find", "detect", "filter", "select", "reject", "every", "all", "some", "any", "include", "contains", "invoke", "toArray", "first", "initial", "rest", "last", "without", "isEmpty", "pluck"];
            return c.each(d, function(a) {
                b.prototype[a] = function() {
                    var b = c.values(this._regions),
                        d = [b].concat(c.toArray(arguments));
                    return c[a].apply(c, d)
                }
            }), b
        }(e), e.TemplateCache = function(a) {
            this.templateId = a
        }, c.extend(e.TemplateCache, {
            templateCaches: {},
            get: function(a) {
                var b = this.templateCaches[a];
                return b || (b = new e.TemplateCache(a), this.templateCaches[a] = b), b.load()
            },
            clear: function() {
                var a, b = f.call(arguments),
                    c = b.length;
                if (c > 0)
                    for (a = 0; c > a; a++) delete this.templateCaches[b[a]];
                else this.templateCaches = {}
            }
        }), c.extend(e.TemplateCache.prototype, {
            load: function() {
                if (this.compiledTemplate) return this.compiledTemplate;
                var a = this.loadTemplate(this.templateId);
                return this.compiledTemplate = this.compileTemplate(a), this.compiledTemplate
            },
            loadTemplate: function(a) {
                var b = e.$(a).html();
                return b && 0 !== b.length || d("Could not find template: '" + a + "'", "NoTemplateError"), b
            },
            compileTemplate: function(a) {
                return c.template(a)
            }
        }), e.Renderer = {
            render: function(a, b) {
                a || d("Cannot render the template since it's false, null or undefined.", "TemplateNotFoundError");
                var c;
                return c = "function" == typeof a ? a : e.TemplateCache.get(a), c(b)
            }
        }, e.View = b.View.extend({
            constructor: function(a) {
                c.bindAll(this, "render"), c.isObject(this.behaviors) && new e.Behaviors(this), this.options = c.extend({}, c.result(this, "options"), c.isFunction(a) ? a.call(this) : a), this.events = this.normalizeUIKeys(c.result(this, "events")), b.View.prototype.constructor.apply(this, arguments), e.MonitorDOMRefresh(this), this.listenTo(this, "show", this.onShowCalled)
            },
            triggerMethod: e.triggerMethod,
            normalizeMethods: e.normalizeMethods,
            getTemplate: function() {
                return e.getOption(this, "template")
            },
            mixinTemplateHelpers: function(a) {
                a = a || {};
                var b = e.getOption(this, "templateHelpers");
                return c.isFunction(b) && (b = b.call(this)), c.extend(a, b)
            },
            normalizeUIKeys: function(a) {
                var b = c.result(this, "ui");
                return e.normalizeUIKeys(a, b)
            },
            configureTriggers: function() {
                if (this.triggers) {
                    var a = {},
                        b = this.normalizeUIKeys(c.result(this, "triggers"));
                    return c.each(b, function(b, d) {
                        var e = c.isObject(b),
                            f = e ? b.event : b;
                        a[d] = function(a) {
                            if (a) {
                                var c = a.preventDefault,
                                    d = a.stopPropagation,
                                    g = e ? b.preventDefault : c,
                                    h = e ? b.stopPropagation : d;
                                g && c && c.apply(a), h && d && d.apply(a)
                            }
                            var i = {
                                view: this,
                                model: this.model,
                                collection: this.collection
                            };
                            this.triggerMethod(f, i)
                        }
                    }, this), a
                }
            },
            delegateEvents: function(a) {
                this._delegateDOMEvents(a), e.bindEntityEvents(this, this.model, e.getOption(this, "modelEvents")), e.bindEntityEvents(this, this.collection, e.getOption(this, "collectionEvents"))
            },
            _delegateDOMEvents: function(a) {
                a = a || this.events, c.isFunction(a) && (a = a.call(this));
                var d = {},
                    e = c.result(this, "behaviorEvents") || {},
                    f = this.configureTriggers();
                c.extend(d, e, a, f), b.View.prototype.delegateEvents.call(this, d)
            },
            undelegateEvents: function() {
                var a = Array.prototype.slice.call(arguments);
                b.View.prototype.undelegateEvents.apply(this, a), e.unbindEntityEvents(this, this.model, e.getOption(this, "modelEvents")), e.unbindEntityEvents(this, this.collection, e.getOption(this, "collectionEvents"))
            },
            onShowCalled: function() {},
            close: function() {
                if (!this.isClosed) {
                    var a = Array.prototype.slice.call(arguments),
                        b = this.triggerMethod.apply(this, ["before:close"].concat(a));
                    b !== !1 && (this.isClosed = !0, this.triggerMethod.apply(this, ["close"].concat(a)), this.unbindUIElements(), this.remove())
                }
            },
            bindUIElements: function() {
                if (this.ui) {
                    this._uiBindings || (this._uiBindings = this.ui);
                    var a = c.result(this, "_uiBindings");
                    this.ui = {}, c.each(c.keys(a), function(b) {
                        var c = a[b];
                        this.ui[b] = this.$(c)
                    }, this)
                }
            },
            unbindUIElements: function() {
                this.ui && this._uiBindings && (c.each(this.ui, function(a, b) {
                    delete this.ui[b]
                }, this), this.ui = this._uiBindings, delete this._uiBindings)
            }
        }), e.ItemView = e.View.extend({
            constructor: function() {
                e.View.prototype.constructor.apply(this, arguments)
            },
            serializeData: function() {
                var a = {};
                return this.model ? a = this.model.toJSON() : this.collection && (a = {
                    items: this.collection.toJSON()
                }), a
            },
            render: function() {
                this.isClosed = !1, this.triggerMethod("before:render", this), this.triggerMethod("item:before:render", this);
                var a = this.serializeData();
                a = this.mixinTemplateHelpers(a);
                var b = this.getTemplate(),
                    c = e.Renderer.render(b, a);
                return this.$el.html(c), this.bindUIElements(), this.triggerMethod("render", this), this.triggerMethod("item:rendered", this), this
            },
            close: function() {
                this.isClosed || (this.triggerMethod("item:before:close"), e.View.prototype.close.apply(this, arguments), this.triggerMethod("item:closed"))
            }
        }), e.CollectionView = e.View.extend({
            itemViewEventPrefix: "itemview",
            constructor: function() {
                this._initChildViewStorage(), e.View.prototype.constructor.apply(this, arguments), this._initialEvents(), this.initRenderBuffer()
            },
            initRenderBuffer: function() {
                this.elBuffer = document.createDocumentFragment(), this._bufferedChildren = []
            },
            startBuffering: function() {
                this.initRenderBuffer(), this.isBuffering = !0
            },
            endBuffering: function() {
                this.isBuffering = !1, this.appendBuffer(this, this.elBuffer), this._triggerShowBufferedChildren(), this.initRenderBuffer()
            },
            _triggerShowBufferedChildren: function() {
                this._isShown && (c.each(this._bufferedChildren, function(a) {
                    e.triggerMethod.call(a, "show")
                }), this._bufferedChildren = [])
            },
            _initialEvents: function() {
                this.collection && (this.listenTo(this.collection, "add", this.addChildView), this.listenTo(this.collection, "remove", this.removeItemView), this.listenTo(this.collection, "reset", this.render))
            },
            addChildView: function(a) {
                this.closeEmptyView();
                var b = this.getItemView(a),
                    c = this.collection.indexOf(a);
                this.addItemView(a, b, c)
            },
            onShowCalled: function() {
                this.children.each(function(a) {
                    e.triggerMethod.call(a, "show")
                })
            },
            triggerBeforeRender: function() {
                this.triggerMethod("before:render", this), this.triggerMethod("collection:before:render", this)
            },
            triggerRendered: function() {
                this.triggerMethod("render", this), this.triggerMethod("collection:rendered", this)
            },
            render: function() {
                return this.isClosed = !1, this.triggerBeforeRender(), this._renderChildren(), this.triggerRendered(), this
            },
            _renderChildren: function() {
                this.startBuffering(), this.closeEmptyView(), this.closeChildren(), this.isEmpty(this.collection) ? this.showEmptyView() : this.showCollection(), this.endBuffering()
            },
            showCollection: function() {
                var a;
                this.collection.each(function(b, c) {
                    a = this.getItemView(b), this.addItemView(b, a, c)
                }, this)
            },
            showEmptyView: function() {
                var a = this.getEmptyView();
                if (a && !this._showingEmptyView) {
                    this._showingEmptyView = !0;
                    var c = new b.Model;
                    this.addItemView(c, a, 0)
                }
            },
            closeEmptyView: function() {
                this._showingEmptyView && (this.closeChildren(), delete this._showingEmptyView)
            },
            getEmptyView: function() {
                return e.getOption(this, "emptyView")
            },
            getItemView: function() {
                var a = e.getOption(this, "itemView");
                return a || d("An `itemView` must be specified", "NoItemViewError"), a
            },
            addItemView: function(a, b, d) {
                var f = e.getOption(this, "itemViewOptions");
                c.isFunction(f) && (f = f.call(this, a, d));
                var g = this.buildItemView(a, b, f);
                return this.addChildViewEventForwarding(g), this.triggerMethod("before:item:added", g), this.children.add(g), this.renderItemView(g, d), this._isShown && !this.isBuffering && e.triggerMethod.call(g, "show"), this.triggerMethod("after:item:added", g), g
            },
            addChildViewEventForwarding: function(a) {
                var b = e.getOption(this, "itemViewEventPrefix");
                this.listenTo(a, "all", function() {
                    var d = f.call(arguments),
                        g = d[0],
                        h = this.normalizeMethods(this.getItemEvents());
                    d[0] = b + ":" + g, d.splice(1, 0, a), "undefined" != typeof h && c.isFunction(h[g]) && h[g].apply(this, d), e.triggerMethod.apply(this, d)
                }, this)
            },
            getItemEvents: function() {
                return c.isFunction(this.itemEvents) ? this.itemEvents.call(this) : this.itemEvents
            },
            renderItemView: function(a, b) {
                a.render(), this.appendHtml(this, a, b)
            },
            buildItemView: function(a, b, d) {
                var e = c.extend({
                    model: a
                }, d);
                return new b(e)
            },
            removeItemView: function(a) {
                var b = this.children.findByModel(a);
                this.removeChildView(b), this.checkEmpty()
            },
            removeChildView: function(a) {
                a && (this.stopListening(a), a.close ? a.close() : a.remove && a.remove(), this.children.remove(a)), this.triggerMethod("item:removed", a)
            },
            isEmpty: function() {
                return !this.collection || 0 === this.collection.length
            },
            checkEmpty: function() {
                this.isEmpty(this.collection) && this.showEmptyView()
            },
            appendBuffer: function(a, b) {
                a.$el.append(b)
            },
            appendHtml: function(a, b) {
                a.isBuffering ? (a.elBuffer.appendChild(b.el), a._bufferedChildren.push(b)) : a.$el.append(b.el)
            },
            _initChildViewStorage: function() {
                this.children = new b.ChildViewContainer
            },
            close: function() {
                this.isClosed || (this.triggerMethod("collection:before:close"), this.closeChildren(), this.triggerMethod("collection:closed"), e.View.prototype.close.apply(this, arguments))
            },
            closeChildren: function() {
                this.children.each(function(a) {
                    this.removeChildView(a)
                }, this), this.checkEmpty()
            }
        }), e.CompositeView = e.CollectionView.extend({
            constructor: function() {
                e.CollectionView.prototype.constructor.apply(this, arguments)
            },
            _initialEvents: function() {
                this.once("render", function() {
                    this.collection && (this.listenTo(this.collection, "add", this.addChildView), this.listenTo(this.collection, "remove", this.removeItemView), this.listenTo(this.collection, "reset", this._renderChildren))
                })
            },
            getItemView: function() {
                var a = e.getOption(this, "itemView") || this.constructor;
                return a || d("An `itemView` must be specified", "NoItemViewError"), a
            },
            serializeData: function() {
                var a = {};
                return this.model && (a = this.model.toJSON()), a
            },
            render: function() {
                this.isRendered = !0, this.isClosed = !1, this.resetItemViewContainer(), this.triggerBeforeRender();
                var a = this.renderModel();
                return this.$el.html(a), this.bindUIElements(), this.triggerMethod("composite:model:rendered"), this._renderChildren(), this.triggerMethod("composite:rendered"), this.triggerRendered(), this
            },
            _renderChildren: function() {
                this.isRendered && (this.triggerMethod("composite:collection:before:render"), e.CollectionView.prototype._renderChildren.call(this), this.triggerMethod("composite:collection:rendered"))
            },
            renderModel: function() {
                var a = {};
                a = this.serializeData(), a = this.mixinTemplateHelpers(a);
                var b = this.getTemplate();
                return e.Renderer.render(b, a)
            },
            appendBuffer: function(a, b) {
                var c = this.getItemViewContainer(a);
                c.append(b)
            },
            appendHtml: function(a, b) {
                if (a.isBuffering) a.elBuffer.appendChild(b.el), a._bufferedChildren.push(b);
                else {
                    var c = this.getItemViewContainer(a);
                    c.append(b.el)
                }
            },
            getItemViewContainer: function(a) {
                if ("$itemViewContainer" in a) return a.$itemViewContainer;
                var b, f = e.getOption(a, "itemViewContainer");
                if (f) {
                    var g = c.isFunction(f) ? f.call(this) : f;
                    b = a.$(g), b.length <= 0 && d("The specified `itemViewContainer` was not found: " + a.itemViewContainer, "ItemViewContainerMissingError")
                } else b = a.$el;
                return a.$itemViewContainer = b, b
            },
            resetItemViewContainer: function() {
                this.$itemViewContainer && delete this.$itemViewContainer
            }
        }), e.Layout = e.ItemView.extend({
            regionType: e.Region,
            constructor: function(a) {
                a = a || {}, this._firstRender = !0, this._initializeRegions(a), e.ItemView.prototype.constructor.call(this, a)
            },
            render: function() {
                return this.isClosed && this._initializeRegions(), this._firstRender ? this._firstRender = !1 : this.isClosed || this._reInitializeRegions(), e.ItemView.prototype.render.apply(this, arguments)
            },
            close: function() {
                this.isClosed || (this.regionManager.close(), e.ItemView.prototype.close.apply(this, arguments))
            },
            addRegion: function(a, b) {
                var c = {};
                return c[a] = b, this._buildRegions(c)[a]
            },
            addRegions: function(a) {
                return this.regions = c.extend({}, this.regions, a), this._buildRegions(a)
            },
            removeRegion: function(a) {
                return delete this.regions[a], this.regionManager.removeRegion(a)
            },
            _buildRegions: function(a) {
                var b = this,
                    c = {
                        regionType: e.getOption(this, "regionType"),
                        parentEl: function() {
                            return b.$el
                        }
                    };
                return this.regionManager.addRegions(a, c)
            },
            _initializeRegions: function(a) {
                var b;
                this._initRegionManager(), b = c.isFunction(this.regions) ? this.regions(a) : this.regions || {}, this.addRegions(b)
            },
            _reInitializeRegions: function() {
                this.regionManager.closeRegions(), this.regionManager.each(function(a) {
                    a.reset()
                })
            },
            _initRegionManager: function() {
                this.regionManager = new e.RegionManager, this.listenTo(this.regionManager, "region:add", function(a, b) {
                    this[a] = b, this.trigger("region:add", a, b)
                }), this.listenTo(this.regionManager, "region:remove", function(a, b) {
                    delete this[a], this.trigger("region:remove", a, b)
                })
            }
        }), e.Behavior = function(a, b) {
            function c(b, c) {
                this.view = c, this.defaults = a.result(this, "defaults") || {}, this.options = a.extend({}, this.defaults, b), this.$ = function() {
                    return this.view.$.apply(this.view, arguments)
                }, this.initialize.apply(this, arguments)
            }
            return a.extend(c.prototype, {
                initialize: function() {},
                triggerMethod: e.triggerMethod
            }), a.extend(c, {
                extend: b.View.extend
            }), c
        }(c, b), e.Behaviors = function(a, b) {
            function c(a) {
                this.behaviors = c.parseBehaviors(a, a.behaviors), c.wrap(a, this.behaviors, ["bindUIElements", "unbindUIElements", "delegateEvents", "undelegateEvents", "onShow", "onClose", "behaviorEvents", "triggerMethod", "setElement"])
            }
            var d = {
                setElement: function(a, c) {
                    a.apply(this, b.tail(arguments, 2)), b.each(c, function(a) {
                        a.$el = this.$el
                    }, this)
                },
                onShow: function(c, d) {
                    var e = b.tail(arguments, 2);
                    b.each(d, function(b) {
                        a.triggerMethod.apply(b, ["show"].concat(e))
                    }), b.isFunction(c) && c.apply(this, e)
                },
                onClose: function(c, d) {
                    var e = b.tail(arguments, 2);
                    b.each(d, function(b) {
                        a.triggerMethod.apply(b, ["close"].concat(e))
                    }), b.isFunction(c) && c.apply(this, e)
                },
                bindUIElements: function(a, c) {
                    a.apply(this), b.invoke(c, a)
                },
                unbindUIElements: function(a, c) {
                    a.apply(this), b.invoke(c, a)
                },
                triggerMethod: function(a, c) {
                    var d = b.tail(arguments, 2);
                    a.apply(this, d), b.each(c, function(b) {
                        a.apply(b, d)
                    })
                },
                delegateEvents: function(c, d) {
                    var e = b.tail(arguments, 2);
                    c.apply(this, e), b.each(d, function(b) {
                        a.bindEntityEvents(this, this.model, a.getOption(b, "modelEvents")), a.bindEntityEvents(this, this.collection, a.getOption(b, "collectionEvents"))
                    }, this)
                },
                undelegateEvents: function(c, d) {
                    var e = b.tail(arguments, 2);
                    c.apply(this, e), b.each(d, function(b) {
                        a.unbindEntityEvents(this, this.model, a.getOption(b, "modelEvents")), a.unbindEntityEvents(this, this.collection, a.getOption(b, "collectionEvents"))
                    }, this)
                },
                behaviorEvents: function(c, d) {
                    var e = {},
                        f = b.result(this, "ui");
                    return b.each(d, function(c, d) {
                        var g = {},
                            h = b.result(c, "events") || {},
                            i = b.result(c, "ui"),
                            j = b.extend({}, f, i);
                        h = a.normalizeUIKeys(h, j), b.each(b.keys(h), function(a) {
                            var e = new Array(d + 2).join(" "),
                                f = a + e,
                                i = b.isFunction(h[a]) ? h[a] : c[h[a]];
                            g[f] = b.bind(i, c)
                        }), e = b.extend(e, g)
                    }), e
                }
            };
            return b.extend(c, {
                behaviorsLookup: function() {
                    throw new Error("You must define where your behaviors are stored. See https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.behaviors.md#behaviorslookup")
                },
                getBehaviorClass: function(a, d) {
                    return a.behaviorClass ? a.behaviorClass : b.isFunction(c.behaviorsLookup) ? c.behaviorsLookup.apply(this, arguments)[d] : c.behaviorsLookup[d]
                },
                parseBehaviors: function(a, d) {
                    return b.map(d, function(b, d) {
                        var e = c.getBehaviorClass(b, d);
                        return new e(b, a)
                    })
                },
                wrap: function(a, c, e) {
                    b.each(e, function(e) {
                        a[e] = b.partial(d[e], a[e], c)
                    })
                }
            }), c
        }(e, c), e.AppRouter = b.Router.extend({
            constructor: function(a) {
                b.Router.prototype.constructor.apply(this, arguments), this.options = a || {};
                var c = e.getOption(this, "appRoutes"),
                    d = this._getController();
                this.processAppRoutes(d, c)
            },
            appRoute: function(a, b) {
                var c = this._getController();
                this._addAppRoute(c, a, b)
            },
            processAppRoutes: function(a, b) {
                if (b) {
                    var d = c.keys(b).reverse();
                    c.each(d, function(c) {
                        this._addAppRoute(a, c, b[c])
                    }, this)
                }
            },
            _getController: function() {
                return e.getOption(this, "controller")
            },
            _addAppRoute: function(a, b, e) {
                var f = a[e];
                f || d("Method '" + e + "' was not found on the controller"), this.route(b, e, c.bind(f, a))
            }
        }), e.Application = function(a) {
            this._initRegionManager(), this._initCallbacks = new e.Callbacks, this.vent = new b.Wreqr.EventAggregator, this.commands = new b.Wreqr.Commands, this.reqres = new b.Wreqr.RequestResponse, this.submodules = {}, c.extend(this, a), this.triggerMethod = e.triggerMethod
        }, c.extend(e.Application.prototype, b.Events, {
            execute: function() {
                this.commands.execute.apply(this.commands, arguments)
            },
            request: function() {
                return this.reqres.request.apply(this.reqres, arguments)
            },
            addInitializer: function(a) {
                this._initCallbacks.add(a)
            },
            start: function(a) {
                this.triggerMethod("initialize:before", a), this._initCallbacks.run(a, this), this.triggerMethod("initialize:after", a), this.triggerMethod("start", a)
            },
            addRegions: function(a) {
                return this._regionManager.addRegions(a)
            },
            closeRegions: function() {
                this._regionManager.closeRegions()
            },
            removeRegion: function(a) {
                this._regionManager.removeRegion(a)
            },
            getRegion: function(a) {
                return this._regionManager.get(a)
            },
            module: function(a, b) {
                var c = e.Module.getClass(b),
                    d = f.call(arguments);
                return d.unshift(this), c.create.apply(c, d)
            },
            _initRegionManager: function() {
                this._regionManager = new e.RegionManager, this.listenTo(this._regionManager, "region:add", function(a, b) {
                    this[a] = b
                }), this.listenTo(this._regionManager, "region:remove", function(a) {
                    delete this[a]
                })
            }
        }), e.Application.extend = e.extend, e.Module = function(a, b, d) {
            this.moduleName = a, this.options = c.extend({}, this.options, d), this.initialize = d.initialize || this.initialize, this.submodules = {}, this._setupInitializersAndFinalizers(), this.app = b, this.startWithParent = !0, this.triggerMethod = e.triggerMethod, c.isFunction(this.initialize) && this.initialize(this.options, a, b)
        }, e.Module.extend = e.extend, c.extend(e.Module.prototype, b.Events, {
            initialize: function() {},
            addInitializer: function(a) {
                this._initializerCallbacks.add(a)
            },
            addFinalizer: function(a) {
                this._finalizerCallbacks.add(a)
            },
            start: function(a) {
                this._isInitialized || (c.each(this.submodules, function(b) {
                    b.startWithParent && b.start(a)
                }), this.triggerMethod("before:start", a), this._initializerCallbacks.run(a, this), this._isInitialized = !0, this.triggerMethod("start", a))
            },
            stop: function() {
                this._isInitialized && (this._isInitialized = !1, e.triggerMethod.call(this, "before:stop"), c.each(this.submodules, function(a) {
                    a.stop()
                }), this._finalizerCallbacks.run(void 0, this), this._initializerCallbacks.reset(), this._finalizerCallbacks.reset(), e.triggerMethod.call(this, "stop"))
            },
            addDefinition: function(a, b) {
                this._runModuleDefinition(a, b)
            },
            _runModuleDefinition: function(a, d) {
                if (a) {
                    var f = c.flatten([this, this.app, b, e, e.$, c, d]);
                    a.apply(this, f)
                }
            },
            _setupInitializersAndFinalizers: function() {
                this._initializerCallbacks = new e.Callbacks, this._finalizerCallbacks = new e.Callbacks
            }
        }), c.extend(e.Module, {
            create: function(a, b, d) {
                var e = a,
                    g = f.call(arguments);
                g.splice(0, 3), b = b.split(".");
                var h = b.length,
                    i = [];
                return i[h - 1] = d, c.each(b, function(b, c) {
                    var f = e;
                    e = this._getModule(f, b, a, d), this._addModuleDefinition(f, e, i[c], g)
                }, this), e
            },
            _getModule: function(a, b, d, e) {
                var f = c.extend({}, e),
                    g = this.getClass(e),
                    h = a[b];
                return h || (h = new g(b, d, f), a[b] = h, a.submodules[b] = h), h
            },
            getClass: function(a) {
                var b = e.Module;
                return a ? a.prototype instanceof b ? a : a.moduleClass || b : b
            },
            _addModuleDefinition: function(a, b, c, d) {
                var e = this._getDefine(c),
                    f = this._getStartWithParent(c, b);
                e && b.addDefinition(e, d), this._addStartWithParent(a, b, f)
            },
            _getStartWithParent: function(a, b) {
                var d;
                return c.isFunction(a) && a.prototype instanceof e.Module ? (d = b.constructor.prototype.startWithParent, c.isUndefined(d) ? !0 : d) : c.isObject(a) ? (d = a.startWithParent, c.isUndefined(d) ? !0 : d) : !0
            },
            _getDefine: function(a) {
                return !c.isFunction(a) || a.prototype instanceof e.Module ? c.isObject(a) ? a.define : null : a
            },
            _addStartWithParent: function(a, b, c) {
                b.startWithParent = b.startWithParent && c, b.startWithParent && !b.startWithParentIsConfigured && (b.startWithParentIsConfigured = !0, a.addInitializer(function(a) {
                    b.startWithParent && b.start(a)
                }))
            }
        }), e
}(this, Backbone, _);
! function(a) {
    a.Backbone && a.Backbone.Model && a.Backbone.Model.prototype._validate && (a.Backbone.Model.prototype._validate = function(a, b) {
        if (!b.validate || !this.validate) return !0;
        b.validateAll !== !1 && (a = _.extend({}, this.attributes, a));
        var c = this.validationError = this.validate(a, b) || null;
        return c ? (this.trigger("invalid", this, c, _.extend(b || {}, {
            validationError: c
        })), !1) : !0
    })
}(window, document), ! function(a, b) {
    "use strict";

    function c(a, b) {
        var c, d, e = a.toLowerCase();
        for (b = [].concat(b), c = 0; c < b.length; c += 1)
            if (d = b[c]) {
                if (d.test && d.test(a)) return !0;
                if (d.toLowerCase() === e) return !0
            }
    }
    var d = b.prototype.trim,
        e = b.prototype.trimRight,
        f = b.prototype.trimLeft,
        g = function(a) {
            return 1 * a || 0
        },
        h = function(a, b) {
            if (1 > b) return "";
            for (var c = ""; b > 0;) 1 & b && (c += a), b >>= 1, a += a;
            return c
        },
        i = [].slice,
        j = function(a) {
            return null == a ? "\\s" : a.source ? a.source : "[" + o.escapeRegExp(a) + "]"
        },
        k = {
            lt: "<",
            gt: ">",
            quot: '"',
            amp: "&",
            apos: "'"
        },
        l = {};
    for (var m in k) l[k[m]] = m;
    l["'"] = "#39";
    var n = function() {
            function a(a) {
                return Object.prototype.toString.call(a).slice(8, -1).toLowerCase()
            }
            var c = h,
                d = function() {
                    return d.cache.hasOwnProperty(arguments[0]) || (d.cache[arguments[0]] = d.parse(arguments[0])), d.format.call(null, d.cache[arguments[0]], arguments)
                };
            return d.format = function(d, e) {
                var f, g, h, i, j, k, l, m = 1,
                    o = d.length,
                    p = "",
                    q = [];
                for (g = 0; o > g; g++)
                    if (p = a(d[g]), "string" === p) q.push(d[g]);
                    else if ("array" === p) {
                    if (i = d[g], i[2])
                        for (f = e[m], h = 0; h < i[2].length; h++) {
                            if (!f.hasOwnProperty(i[2][h])) throw new Error(n('[_.sprintf] property "%s" does not exist', i[2][h]));
                            f = f[i[2][h]]
                        } else f = i[1] ? e[i[1]] : e[m++];
                    if (/[^s]/.test(i[8]) && "number" != a(f)) throw new Error(n("[_.sprintf] expecting number but found %s", a(f)));
                    switch (i[8]) {
                        case "b":
                            f = f.toString(2);
                            break;
                        case "c":
                            f = b.fromCharCode(f);
                            break;
                        case "d":
                            f = parseInt(f, 10);
                            break;
                        case "e":
                            f = i[7] ? f.toExponential(i[7]) : f.toExponential();
                            break;
                        case "f":
                            f = i[7] ? parseFloat(f).toFixed(i[7]) : parseFloat(f);
                            break;
                        case "o":
                            f = f.toString(8);
                            break;
                        case "s":
                            f = (f = b(f)) && i[7] ? f.substring(0, i[7]) : f;
                            break;
                        case "u":
                            f = Math.abs(f);
                            break;
                        case "x":
                            f = f.toString(16);
                            break;
                        case "X":
                            f = f.toString(16).toUpperCase()
                    }
                    f = /[def]/.test(i[8]) && i[3] && f >= 0 ? "+" + f : f, k = i[4] ? "0" == i[4] ? "0" : i[4].charAt(1) : " ", l = i[6] - b(f).length, j = i[6] ? c(k, l) : "", q.push(i[5] ? f + j : j + f)
                }
                return q.join("")
            }, d.cache = {}, d.parse = function(a) {
                for (var b = a, c = [], d = [], e = 0; b;) {
                    if (null !== (c = /^[^\x25]+/.exec(b))) d.push(c[0]);
                    else if (null !== (c = /^\x25{2}/.exec(b))) d.push("%");
                    else {
                        if (null === (c = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(b))) throw new Error("[_.sprintf] huh?");
                        if (c[2]) {
                            e |= 1;
                            var f = [],
                                g = c[2],
                                h = [];
                            if (null === (h = /^([a-z_][a-z_\d]*)/i.exec(g))) throw new Error("[_.sprintf] huh?");
                            for (f.push(h[1]);
                                "" !== (g = g.substring(h[0].length));)
                                if (null !== (h = /^\.([a-z_][a-z_\d]*)/i.exec(g))) f.push(h[1]);
                                else {
                                    if (null === (h = /^\[(\d+)\]/.exec(g))) throw new Error("[_.sprintf] huh?");
                                    f.push(h[1])
                                }
                            c[2] = f
                        } else e |= 2;
                        if (3 === e) throw new Error("[_.sprintf] mixing positional and named placeholders is not (yet) supported");
                        d.push(c)
                    }
                    b = b.substring(c[0].length)
                }
                return d
            }, d
        }(),
        o = {
            VERSION: "2.3.0",
            isBlank: function(a) {
                return null == a && (a = ""), /^\s*$/.test(a)
            },
            stripTags: function(a) {
                return null == a ? "" : b(a).replace(/<\/?[^>]+>/g, "")
            },
            capitalize: function(a) {
                return a = null == a ? "" : b(a), a.charAt(0).toUpperCase() + a.slice(1)
            },
            chop: function(a, c) {
                return null == a ? [] : (a = b(a), c = ~~c, c > 0 ? a.match(new RegExp(".{1," + c + "}", "g")) : [a])
            },
            clean: function(a) {
                return o.strip(a).replace(/\s+/g, " ")
            },
            count: function(a, c) {
                if (null == a || null == c) return 0;
                a = b(a), c = b(c);
                for (var d = 0, e = 0, f = c.length;;) {
                    if (e = a.indexOf(c, e), -1 === e) break;
                    d++, e += f
                }
                return d
            },
            chars: function(a) {
                return null == a ? [] : b(a).split("")
            },
            swapCase: function(a) {
                return null == a ? "" : b(a).replace(/\S/g, function(a) {
                    return a === a.toUpperCase() ? a.toLowerCase() : a.toUpperCase()
                })
            },
            escapeHTML: function(a) {
                return null == a ? "" : b(a).replace(/[&<>"']/g, function(a) {
                    return "&" + l[a] + ";"
                })
            },
            unescapeHTML: function(a) {
                return null == a ? "" : b(a).replace(/\&([^;]+);/g, function(a, c) {
                    var d;
                    return c in k ? k[c] : (d = c.match(/^#x([\da-fA-F]+)$/)) ? b.fromCharCode(parseInt(d[1], 16)) : (d = c.match(/^#(\d+)$/)) ? b.fromCharCode(~~d[1]) : a
                })
            },
            escapeRegExp: function(a) {
                return null == a ? "" : b(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1")
            },
            splice: function(a, b, c, d) {
                var e = o.chars(a);
                return e.splice(~~b, ~~c, d), e.join("")
            },
            insert: function(a, b, c) {
                return o.splice(a, b, 0, c)
            },
            include: function(a, c) {
                return "" === c ? !0 : null == a ? !1 : -1 !== b(a).indexOf(c)
            },
            join: function() {
                var a = i.call(arguments),
                    b = a.shift();
                return null == b && (b = ""), a.join(b)
            },
            lines: function(a) {
                return null == a ? [] : b(a).split("\n")
            },
            reverse: function(a) {
                return o.chars(a).reverse().join("")
            },
            startsWith: function(a, c) {
                return "" === c ? !0 : null == a || null == c ? !1 : (a = b(a), c = b(c), a.length >= c.length && a.slice(0, c.length) === c)
            },
            endsWith: function(a, c) {
                return "" === c ? !0 : null == a || null == c ? !1 : (a = b(a), c = b(c), a.length >= c.length && a.slice(a.length - c.length) === c)
            },
            succ: function(a) {
                return null == a ? "" : (a = b(a), a.slice(0, -1) + b.fromCharCode(a.charCodeAt(a.length - 1) + 1))
            },
            titleize: function(a) {
                return null == a ? "" : (a = b(a).toLowerCase(), a.replace(/(?:^|\s|-)\S/g, function(a) {
                    return a.toUpperCase()
                }))
            },
            camelize: function(a) {
                return o.trim(a).replace(/[-_\s]+(.)?/g, function(a, b) {
                    return b ? b.toUpperCase() : ""
                })
            },
            underscored: function(a) {
                return o.trim(a).replace(/([a-z\d])([A-Z]+)/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase()
            },
            dasherize: function(a) {
                return o.trim(a).replace(/([A-Z])/g, "-$1").replace(/[-_\s]+/g, "-").toLowerCase()
            },
            classify: function(a) {
                return o.titleize(b(a).replace(/[\W_]/g, " ")).replace(/\s/g, "")
            },
            humanize: function(a) {
                return o.capitalize(o.underscored(a).replace(/_id$/, "").replace(/_/g, " "))
            },
            trim: function(a, c) {
                return null == a ? "" : !c && d ? d.call(a) : (c = j(c), b(a).replace(new RegExp("^" + c + "+|" + c + "+$", "g"), ""))
            },
            ltrim: function(a, c) {
                return null == a ? "" : !c && f ? f.call(a) : (c = j(c), b(a).replace(new RegExp("^" + c + "+"), ""))
            },
            rtrim: function(a, c) {
                return null == a ? "" : !c && e ? e.call(a) : (c = j(c), b(a).replace(new RegExp(c + "+$"), ""))
            },
            truncate: function(a, c, d) {
                return null == a ? "" : (a = b(a), d = d || "...", c = ~~c, a.length > c ? a.slice(0, c) + d : a)
            },
            prune: function(a, c, d) {
                if (null == a) return "";
                if (a = b(a), c = ~~c, d = null != d ? b(d) : "...", a.length <= c) return a;
                var e = function(a) {
                        return a.toUpperCase() !== a.toLowerCase() ? "A" : " "
                    },
                    f = a.slice(0, c + 1).replace(/.(?=\W*\w*$)/g, e);
                return f = f.slice(f.length - 2).match(/\w\w/) ? f.replace(/\s*\S+$/, "") : o.rtrim(f.slice(0, f.length - 1)), (f + d).length > a.length ? a : a.slice(0, f.length) + d
            },
            words: function(a, b) {
                return o.isBlank(a) ? [] : o.trim(a, b).split(b || /\s+/)
            },
            pad: function(a, c, d, e) {
                a = null == a ? "" : b(a), c = ~~c;
                var f = 0;
                switch (d ? d.length > 1 && (d = d.charAt(0)) : d = " ", e) {
                    case "right":
                        return f = c - a.length, a + h(d, f);
                    case "both":
                        return f = c - a.length, h(d, Math.ceil(f / 2)) + a + h(d, Math.floor(f / 2));
                    default:
                        return f = c - a.length, h(d, f) + a
                }
            },
            lpad: function(a, b, c) {
                return o.pad(a, b, c)
            },
            rpad: function(a, b, c) {
                return o.pad(a, b, c, "right")
            },
            lrpad: function(a, b, c) {
                return o.pad(a, b, c, "both")
            },
            sprintf: n,
            vsprintf: function(a, b) {
                return b.unshift(a), n.apply(null, b)
            },
            toNumber: function(a, b) {
                return a ? (a = o.trim(a), a.match(/^-?\d+(?:\.\d+)?$/) ? g(g(a).toFixed(~~b)) : 0 / 0) : 0
            },
            numberFormat: function(a, b, c, d) {
                if (isNaN(a) || null == a) return "";
                a = a.toFixed(~~b), d = "string" == typeof d ? d : ",";
                var e = a.split("."),
                    f = e[0],
                    g = e[1] ? (c || ".") + e[1] : "";
                return f.replace(/(\d)(?=(?:\d{3})+$)/g, "$1" + d) + g
            },
            strRight: function(a, c) {
                if (null == a) return "";
                a = b(a), c = null != c ? b(c) : c;
                var d = c ? a.indexOf(c) : -1;
                return ~d ? a.slice(d + c.length, a.length) : a
            },
            strRightBack: function(a, c) {
                if (null == a) return "";
                a = b(a), c = null != c ? b(c) : c;
                var d = c ? a.lastIndexOf(c) : -1;
                return ~d ? a.slice(d + c.length, a.length) : a
            },
            strLeft: function(a, c) {
                if (null == a) return "";
                a = b(a), c = null != c ? b(c) : c;
                var d = c ? a.indexOf(c) : -1;
                return ~d ? a.slice(0, d) : a
            },
            strLeftBack: function(a, b) {
                if (null == a) return "";
                a += "", b = null != b ? "" + b : b;
                var c = a.lastIndexOf(b);
                return ~c ? a.slice(0, c) : a
            },
            toSentence: function(a, b, c, d) {
                b = b || ", ", c = c || " and ";
                var e = a.slice(),
                    f = e.pop();
                return a.length > 2 && d && (c = o.rtrim(b) + c), e.length ? e.join(b) + c + f : f
            },
            toSentenceSerial: function() {
                var a = i.call(arguments);
                return a[3] = !0, o.toSentence.apply(o, a)
            },
            slugify: function(a) {
                if (null == a) return "";
                var c = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź",
                    d = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz",
                    e = new RegExp(j(c), "g");
                return a = b(a).toLowerCase().replace(e, function(a) {
                    var b = c.indexOf(a);
                    return d.charAt(b) || "-"
                }), o.dasherize(a.replace(/[^\w\s-]/g, ""))
            },
            surround: function(a, b) {
                return [b, a, b].join("")
            },
            quote: function(a, b) {
                return o.surround(a, b || '"')
            },
            unquote: function(a, b) {
                return b = b || '"', a[0] === b && a[a.length - 1] === b ? a.slice(1, a.length - 1) : a
            },
            exports: function() {
                var a = {};
                for (var b in this) this.hasOwnProperty(b) && !b.match(/^(?:include|contains|reverse)$/) && (a[b] = this[b]);
                return a
            },
            repeat: function(a, c, d) {
                if (null == a) return "";
                if (c = ~~c, null == d) return h(b(a), c);
                for (var e = []; c > 0; e[--c] = a);
                return e.join(d)
            },
            naturalCmp: function(a, c) {
                if (a == c) return 0;
                if (!a) return -1;
                if (!c) return 1;
                for (var d = /(\.\d+)|(\d+)|(\D+)/g, e = b(a).toLowerCase().match(d), f = b(c).toLowerCase().match(d), g = Math.min(e.length, f.length), h = 0; g > h; h++) {
                    var i = e[h],
                        j = f[h];
                    if (i !== j) {
                        var k = parseInt(i, 10);
                        if (!isNaN(k)) {
                            var l = parseInt(j, 10);
                            if (!isNaN(l) && k - l) return k - l
                        }
                        return j > i ? -1 : 1
                    }
                }
                return e.length === f.length ? e.length - f.length : c > a ? -1 : 1
            },
            levenshtein: function(a, c) {
                if (null == a && null == c) return 0;
                if (null == a) return b(c).length;
                if (null == c) return b(a).length;
                a = b(a), c = b(c);
                for (var d, e, f = [], g = 0; g <= c.length; g++)
                    for (var h = 0; h <= a.length; h++) e = g && h ? a.charAt(h - 1) === c.charAt(g - 1) ? d : Math.min(f[h], f[h - 1], d) + 1 : g + h, d = f[h], f[h] = e;
                return f.pop()
            },
            toBoolean: function(a, b, d) {
                return "number" == typeof a && (a = "" + a), "string" != typeof a ? !!a : (a = o.trim(a), c(a, b || ["true", "1"]) ? !0 : c(a, d || ["false", "0"]) ? !1 : void 0)
            }
        };
    o.strip = o.trim, o.lstrip = o.ltrim, o.rstrip = o.rtrim, o.center = o.lrpad, o.rjust = o.lpad, o.ljust = o.rpad, o.contains = o.include, o.q = o.quote, o.toBool = o.toBoolean, "undefined" != typeof exports && ("undefined" != typeof module && module.exports && (module.exports = o), exports._s = o), "function" == typeof define && define.amd && define("underscore.string", [], function() {
        return o
    }), a._ = a._ || {}, a._.string = a._.str = o
}(this, String),
function($) {
    $.fn.editable = function(a, b) {
        if ("disable" == a) return $(this).data("disabled.editable", !0), void 0;
        if ("enable" == a) return $(this).data("disabled.editable", !1), void 0;
        if ("destroy" == a) return $(this).unbind($(this).data("event.editable")).removeData("disabled.editable").removeData("event.editable"), void 0;
        var c = $.extend({}, $.fn.editable.defaults, {
                target: a
            }, b),
            d = $.editable.types[c.type].plugin || function() {},
            e = $.editable.types[c.type].submit || function() {},
            f = $.editable.types[c.type].buttons || $.editable.types.defaults.buttons,
            g = $.editable.types[c.type].content || $.editable.types.defaults.content,
            h = $.editable.types[c.type].element || $.editable.types.defaults.element,
            i = $.editable.types[c.type].reset || $.editable.types.defaults.reset,
            j = c.callback || function() {},
            k = c.onedit || function() {},
            l = c.onsubmit || function() {},
            m = c.onreset || function() {},
            n = c.onerror || i;
        return c.tooltip && $(this).attr("title", c.tooltip), c.autowidth = "auto" == c.width, c.autoheight = "auto" == c.height, this.each(function() {
            var a = this,
                b = $(a).width(),
                o = $(a).height();
            $(this).data("event.editable", c.event), $.trim($(this).html()) || $(this).html(c.placeholder), $(this).bind(c.event, function(m) {
                if (!0 !== $(this).data("disabled.editable") && !a.editing && !1 !== k.apply(this, [c, a])) {
                    m.preventDefault(), m.stopPropagation(), c.tooltip && $(a).removeAttr("title"), 0 == $(a).width() ? (c.width = b, c.height = o) : ("none" != c.width && (c.width = c.autowidth ? $(a).width() : c.width), "none" != c.height && (c.height = c.autoheight ? $(a).height() : c.height)), $(this).html().toLowerCase().replace(/(;|")/g, "") == c.placeholder.toLowerCase().replace(/(;|")/g, "") && $(this).html(""), a.editing = !0, a.revert = $(a).html(), $(a).html("");
                    var p = $("<form />");
                    c.cssclass && ("inherit" == c.cssclass ? p.attr("class", $(a).attr("class")) : p.attr("class", c.cssclass)), c.style && ("inherit" == c.style ? (p.attr("style", $(a).attr("style")), p.css("display", $(a).css("display"))) : p.attr("style", c.style));
                    var q, r = h.apply(p, [c, a]);
                    if (c.loadurl) {
                        var s = setTimeout(function() {
                                r.disabled = !0, g.apply(p, [c.loadtext, c, a])
                            }, 100),
                            t = {};
                        t[c.id] = a.id, $.isFunction(c.loaddata) ? $.extend(t, c.loaddata.apply(a, [a.revert, c])) : $.extend(t, c.loaddata), $.ajax({
                            type: c.loadtype,
                            url: c.loadurl,
                            data: t,
                            async: !1,
                            success: function(a) {
                                window.clearTimeout(s), q = a, r.disabled = !1
                            }
                        })
                    } else c.data ? (q = c.data, $.isFunction(c.data) && (q = c.data.apply(a, [a.revert, c]))) : q = a.revert;
                    g.apply(p, [q, c, a]), r.attr("name", c.name), f.apply(p, [c, a]), $(a).append(p), d.apply(p, [c, a]), $(":input:visible:enabled:first", p).focus(), c.select && r.select(), r.keydown(function(b) {
                        27 == b.keyCode && (b.preventDefault(), i.apply(p, [c, a]))
                    });
                    var s;
                    "cancel" == c.onblur ? r.blur(function() {
                        s = setTimeout(function() {
                            i.apply(p, [c, a])
                        }, 500)
                    }) : "submit" == c.onblur ? r.blur(function() {
                        s = setTimeout(function() {
                            p.submit()
                        }, 200)
                    }) : $.isFunction(c.onblur) ? r.blur(function() {
                        c.onblur.apply(a, [r.val(), c])
                    }) : r.blur(function() {}), p.submit(function(b) {
                        if (s && clearTimeout(s), b.preventDefault(), !1 !== l.apply(p, [c, a]) && !1 !== e.apply(p, [c, a]))
                            if ($.isFunction(c.target)) {
                                var d = c.target.apply(a, [r.val(), c]);
                                $(a).html(d), a.editing = !1, j.apply(a, [a.innerHTML, c]), $.trim($(a).html()) || $(a).html(c.placeholder)
                            } else {
                                var f = {};
                                f[c.name] = r.val(), f[c.id] = a.id, $.isFunction(c.submitdata) ? $.extend(f, c.submitdata.apply(a, [a.revert, c])) : $.extend(f, c.submitdata), "PUT" == c.method && (f._method = "put"), $(a).html(c.indicator);
                                var g = {
                                    type: "POST",
                                    data: f,
                                    dataType: "html",
                                    url: c.target,
                                    success: function(b) {
                                        "html" == g.dataType && $(a).html(b), a.editing = !1, j.apply(a, [b, c]), $.trim($(a).html()) || $(a).html(c.placeholder)
                                    },
                                    error: function(b) {
                                        n.apply(p, [c, a, b])
                                    }
                                };
                                $.extend(g, c.ajaxoptions), $.ajax(g)
                            }
                        return $(a).attr("title", c.tooltip), !1
                    })
                }
            }), this.reset = function(b) {
                this.editing && !1 !== m.apply(b, [c, a]) && ($(a).html(a.revert), a.editing = !1, $.trim($(a).html()) || $(a).html(c.placeholder), c.tooltip && $(a).attr("title", c.tooltip))
            }
        })
    }, $.editable = {
        types: {
            defaults: {
                element: function() {
                    var a = $('<input type="hidden"></input>');
                    return $(this).append(a), a
                },
                content: function(a) {
                    $(":input:first", this).val(a)
                },
                reset: function(a, b) {
                    b.reset(this)
                },
                buttons: function(a, b) {
                    var c = this;
                    if (a.submit) {
                        if (a.submit.match(/>$/)) var d = $(a.submit).click(function() {
                            "submit" != d.attr("type") && c.submit()
                        });
                        else {
                            var d = $('<button type="submit" />');
                            d.html(a.submit)
                        }
                        $(this).append(d)
                    }
                    if (a.cancel) {
                        if (a.cancel.match(/>$/)) var e = $(a.cancel);
                        else {
                            var e = $('<button type="cancel" />');
                            e.html(a.cancel)
                        }
                        $(this).append(e), $(e).click(function() {
                            if ($.isFunction($.editable.types[a.type].reset)) var d = $.editable.types[a.type].reset;
                            else var d = $.editable.types.defaults.reset;
                            return d.apply(c, [a, b]), !1
                        })
                    }
                }
            },
            text: {
                element: function(a) {
                    var b = $("<input />");
                    return "none" != a.width && b.width(a.width), "none" != a.height && b.height(a.height), b.attr("autocomplete", "off"), $(this).append(b), b
                }
            },
            textarea: {
                element: function(a) {
                    var b = $("<textarea />");
                    return a.rows ? b.attr("rows", a.rows) : "none" != a.height && b.height(a.height), a.cols ? b.attr("cols", a.cols) : "none" != a.width && b.width(a.width), $(this).append(b), b
                }
            },
            select: {
                element: function() {
                    var a = $("<select />");
                    return $(this).append(a), a
                },
                content: function(data, settings, original) {
                    if (String == data.constructor) eval("var json = " + data);
                    else var json = data;
                    for (var key in json)
                        if (json.hasOwnProperty(key) && "selected" != key) {
                            var option = $("<option />").val(key).append(json[key]);
                            $("select", this).append(option)
                        }
                    $("select", this).children().each(function() {
                        ($(this).val() == json.selected || $(this).text() == $.trim(original.revert)) && $(this).attr("selected", "selected")
                    })
                }
            }
        },
        addInputType: function(a, b) {
            $.editable.types[a] = b
        }
    }, $.fn.editable.defaults = {
        name: "value",
        id: "id",
        type: "text",
        width: "auto",
        height: "auto",
        event: "click.editable",
        onblur: "cancel",
        loadtype: "GET",
        loadtext: "Loading...",
        placeholder: "Click to edit",
        loaddata: {},
        submitdata: {},
        ajaxoptions: {}
    }
}(jQuery),
function(a) {
    a.GrowingInput = function(c, e) {
        var f, g, h;
        e = a.extend({
            min: 0,
            max: null,
            startWidth: 15,
            correction: 15
        }, e), c = a(c).data("growing", this);
        var i = this,
            j = function() {
                h = a("<span></span>").css({
                    "float": "left",
                    display: "inline-block",
                    position: "absolute",
                    left: -1e3
                }).insertAfter(c), a.each(["font-size", "font-family", "padding-left", "padding-top", "padding-bottom", "padding-right", "border-left", "border-right", "border-top", "border-bottom", "word-spacing", "letter-spacing", "text-indent", "text-transform"], function(a, b) {
                    h.css(b, c.css(b))
                }), c.blur(l).keyup(l).keydown(l).keypress(l), l()
            },
            k = function(a) {
                h.text(a);
                var b = h.width();
                return (b ? b : e.startWidth) + e.correction
            },
            l = function() {
                g = f, f = c.val();
                var a = f;
                if (b(e.min) && f.length < e.min) {
                    if (b(g) && g.length <= e.min) return;
                    a = d(f, e.min, "-")
                } else if (b(e.max) && f.length > e.max) {
                    if (b(g) && g.length >= e.max) return;
                    a = f.substr(0, e.max)
                }
                return c.width(k(a)), i
            };
        this.resize = l, j()
    };
    var b = function(a) {
            return !(!a && 0 !== a)
        },
        c = function(a, b) {
            return new Array(b + 1).join(a)
        },
        d = function(a, b, d, e) {
            if (a.length >= b) return this;
            d = d || " ";
            var f = c(d, b - a.length).substr(0, b - a.length);
            return e && "right" != e ? "left" == e ? f + a : f.substr(0, (f.length / 2).floor()) + a + f.substr(0, (f.length / 2).ceil()) : a + f
        }
}(jQuery),
function(a) {
    a.TextboxList = function(f, g) {
        var h, i, j, k, l, m = !1,
            n = [],
            o = {};
        this.index = n;
        var p = a.extend(!0, {
            prefix: "textboxlist",
            max: null,
            unique: !1,
            uniqueInsensitive: !0,
            endEditableBit: !0,
            startEditableBit: !0,
            hideEditableBits: !0,
            inBetweenEditableBits: !0,
            keys: {
                previous: 37,
                next: 39
            },
            bitsOptions: {
                editable: {},
                box: {}
            },
            plugins: {},
            encode: function(c) {
                return a.grep(a.map(c, function(a) {
                    return a = b(a[0]) ? a[0] : a[1], b(a) ? a.toString().replace(/,/, "") : null
                }), function(a) {
                    return void 0 != a
                }).join(",")
            },
            decode: function(a) {
                return a.split(",")
            }
        }, g);
        f = a(f);
        var q = this,
            r = function() {
                h = f.css("display", "none").attr("autocomplete", "off").focus(y), i = a('<div class="' + p.prefix + '" />').insertAfter(f).click(function(a) {
                    (a.target == j.get(0) || a.target == i.get(0)) && y()
                }), j = a('<ul class="' + p.prefix + '-bits" />').appendTo(i);
                for (var b in p.plugins) s(b, p.plugins[b]);
                t()
            },
            s = function(b, c) {
                q.plugins[b] = new(a.TextboxList[d(e(b))])(q, c)
            },
            t = function() {
                p.endEditableBit && u("editable", null, {
                    tabIndex: h.tabIndex
                }).inject(j), E("bitAdd", D, !0), E("bitRemove", D, !0), a(document).click(function(b) {
                    if (m) {
                        if (-1 != b.target.className.indexOf(p.prefix)) {
                            if (b.target == a(i).get(0)) return;
                            var c = a(b.target).parents("div." + p.prefix);
                            if (c.get(0) == i.get(0)) return
                        }
                        z()
                    }
                }).keydown(function(b) {
                    if (m && k) {
                        var c = k.is("editable") ? k.getCaret() : null,
                            d = k.getValue()[1],
                            e = !!a.map(["shift", "alt", "meta", "ctrl"], function(a) {
                                return b[a]
                            }).length,
                            f = e || k.is("editable") && k.isSelected(),
                            g = function() {
                                b.stopPropagation(), b.preventDefault()
                            };
                        switch (b.which) {
                            case 8:
                                if (k.is("box")) return g(), k.remove();
                            case p.keys.previous:
                                !k.is("box") && (0 != c && d.length || f) || (g(), x("prev"));
                                break;
                            case 46:
                                if (k.is("box")) return g(), k.remove();
                            case p.keys.next:
                                (k.is("box") || c == d.length && !f) && (g(), x("next"))
                        }
                    }
                }), C(p.decode(h.val()))
            },
            u = function(c, d, e) {
                if ("box" == c) {
                    if (b(p.max) && j.children("." + p.prefix + "-bit-box").length + 1 > p.max) return !1;
                    if (p.unique && -1 != a.inArray(v(d), n)) return !1
                }
                return new a.TextboxListBit(c, d, q, a.extend(!0, p.bitsOptions[c], e))
            },
            v = function(a) {
                return b(a[0]) ? a[0] : p.uniqueInsensitive ? a[1].toLowerCase() : a[1]
            },
            w = function(a, b, c, d) {
                var e = u("box", [b, a, c]);
                return e && (d && d.length || (d = j.find("." + p.prefix + "-bit-box").filter(":last")), e.inject(d.length ? d : j, d.length ? "after" : "top")), q
            },
            x = function(b, c) {
                var d = A(c && a(c).length ? c : k).toElement(),
                    e = A(d[b]());
                return e && e.focus(), q
            },
            y = function() {
                var a = j.children().filter(":last");
                return a && A(a).focus(), q
            },
            z = function() {
                return m ? (k && k.blur(), m = !1, F("blur")) : q
            },
            A = function(b) {
                return !b.type || "editable" != b.type && "box" != b.type ? a(b).data("textboxlist:bit") : b
            },
            B = function() {
                var a = [];
                return j.children().each(function() {
                    var b = A(this);
                    b.is("editable") || a.push(b.getValue())
                }), a
            },
            C = function(b) {
                b && a.each(b, function(b, c) {
                    c && w.apply(q, a.isArray(c) ? [c[1], c[0], c[2]] : [c])
                })
            },
            D = function() {
                h.val(p.encode(B()))
            },
            E = function(b, c) {
                void 0 == o[b] && (o[b] = []);
                var d = !1;
                return a.each(o[b], function(a) {
                    return a === c ? (d = !0, void 0) : void 0
                }), d || o[b].push(c), q
            },
            F = function(b, d, e) {
                return o && o[b] ? (a.each(o[b], function(a, b) {
                    ! function() {
                        d = void 0 != d ? c(d) : Array.prototype.slice.call(arguments);
                        var a = function() {
                            return b.apply(q || null, d)
                        };
                        return e ? setTimeout(a, e) : a()
                    }()
                }), q) : q
            },
            G = function(a, b) {
                if (o[a])
                    for (var c = o[a].length; c > -1; c--) o[a][c] === b && o[a].splice(c, 1);
                return q
            },
            H = function(b) {
                return a.inArray(v(b), n)
            };
        this.onFocus = function(a) {
            k && k.blur(), clearTimeout(l), k = a, i.addClass(p.prefix + "-focus"), m || (m = !0, F("focus", a))
        }, this.onAdd = function(a) {
            if (p.unique && a.is("box") && n.push(v(a.getValue())), a.is("box")) {
                var b = A(a.toElement().prev());
                if (b && b.is("box") && p.inBetweenEditableBits || !b && p.startEditableBit) {
                    var c = b && b.toElement().length ? b.toElement() : !1,
                        d = u("editable").inject(c || j, c ? "after" : "top");
                    p.hideEditableBits && d.hide()
                }
            }
        }, this.onRemove = function(a) {
            if (p.unique && a.is("box")) {
                var b = H(a.getValue()); - 1 != b && n.splice(b, 1)
            }
            var c = A(a.toElement().prev());
            c && c.is("editable") && c.remove(), x("next", a)
        }, this.onBlur = function(a, b) {
            k = null, i.removeClass(p.prefix + "-focus"), l = setTimeout(z, b ? 0 : 200)
        }, this.setOptions = function(b) {
            p = a.extend(!0, p, b)
        }, this.getOptions = function() {
            return p
        }, this.getContainer = function() {
            return i
        }, this.addEvent = E, this.removeEvent = G, this.fireEvent = F, this.isDuplicate = H, this.create = u, this.add = w, this.getBit = A, this.blur = z, this.focusRelative = x, this.focusLast = y, this.uniqueValue = v, this.setValues = C, this.getValues = B, this.update = D, this.enablePlugin = s, this.plugins = [], r()
    }, a.TextboxListBit = function(c, d, f, g) {
        var h, i, j, k, l, m, n = !1,
            o = e(c),
            p = a.extend(!0, "box" == c ? {
                deleteButton: !0
            } : {
                tabIndex: null,
                growing: !0,
                growingOptions: {},
                stopEnter: !0,
                addOnBlur: !1,
                addKeys: [13, 188, 9]
            }, g);
        this.type = c, this.value = d;
        var q = this,
            r = function() {
                if (j = f.getOptions().prefix + "-bit", k = j + "-" + c, "box" == c) {
                    i = a("<li  />").addClass(j).addClass(k).attr("title", b(q.value[2]) ? q.value[2] : q.value[1]).data("textboxlist:bit", q).hover(function() {
                        i.addClass(j + "-hover").addClass(k + "-hover")
                    }, function() {
                        i.removeClass(j + "-hover").removeClass(k + "-hover")
                    });
                    var d = '<span class="title">' + (b(q.value[2]) ? q.value[2] : q.value[1]) + "</span>";
                    i.html(d).click(t).find(".title").click(function(a) {
                        a.preventDefault(), a.stopPropagation(), t()
                    }), p.deleteButton && (i.addClass(k + "-deletable"), l = a('<a href="#" tabindex="-1" class="' + k + '-deletebutton">' + '<span class="search-choice-close"></span>' + "</a>").attr("title", "Remove email").click(v).appendTo(i)), i.children().click(function(b) {
                        b.preventDefault(), b.stopPropagation(), a(this).parent().click()
                    })
                } else i = a("<li  />").addClass(j).addClass(k).data("textboxlist:bit", q).hover(function() {
                    i.addClass(j + "-hover").addClass(k + "-hover")
                }, function() {
                    i.removeClass(j + "-hover").removeClass(k + "-hover")
                }), h = a('<input type="text" class="' + k + '-input" autocomplete="off" />').val(q.value ? q.value[1] : "").appendTo(i), b(p.tabIndex) && (h.tabIndex = p.tabIndex), p.growing && new a.GrowingInput(h, p.growingOptions), h.focus(function() {
                    t(!0)
                }).blur(function() {
                    u(!0), p.addOnBlur && a(this).val() && z()
                }), (p.addKeys || p.stopEnter) && h.keydown(function(b) {
                    if (n) {
                        var c = function() {
                            b.stopPropagation(), b.preventDefault()
                        };
                        p.stopEnter && 13 === b.which && c(), -1 != a.inArray(b.which, p.addKeys) && (c(), z())
                    }
                })
            },
            s = function(a, b) {
                switch (b || "bottom") {
                    case "top":
                        i.prependTo(a);
                        break;
                    case "bottom":
                        i.appendTo(a);
                        break;
                    case "before":
                        i.insertBefore(a);
                        break;
                    case "after":
                        i.insertAfter(a)
                }
                return f.onAdd(q), y("add")
            },
            t = function(a) {
                return n ? q : (w(), n = !0, f.onFocus(q), i.addClass(j + "-focus").addClass(j + "-" + c + "-focus"), y("focus"), "editable" != c || a || h.focus(), q)
            },
            u = function(a) {
                return n ? (n = !1, f.onBlur(q), i.removeClass(j + "-focus").removeClass(j + "-" + c + "-focus"), y("blur"), "editable" == c && (a || h.blur(), m && !h.val().length && x()), q) : q
            },
            v = function() {
                return u(), f.onRemove(q), i.remove(), y("remove")
            },
            w = function() {
                return i.css("display", "block"), q
            },
            x = function() {
                return i.css("display", "none"), m = !0, q
            },
            y = function(a) {
                return a = e(a), f.fireEvent("bit" + a, q).fireEvent("bit" + o + a, q), q
            };
        if (this.is = function(a) {
                return c == a
            }, this.setValue = function(a) {
                return "editable" == c ? (h.val(b(a[0]) ? a[0] : a[1]), p.growing && h.data("growing").resize()) : d = a, q
            }, this.getValue = function() {
                return "editable" == c ? [null, h.val(), null] : d
            }, "editable" == c) {
            this.getCaret = function() {
                var a = h.get(0);
                if (a.createTextRange) {
                    var b = document.selection.createRange().duplicate();
                    return b.moveEnd("character", a.value.length), "" === b.text ? a.value.length : a.value.lastIndexOf(b.text)
                }
                return a.selectionStart
            }, this.getCaretEnd = function() {
                var a = h.get(0);
                if (a.createTextRange) {
                    var b = document.selection.createRange().duplicate();
                    return b.moveStart("character", -a.value.length), b.text.length
                }
                return a.selectionEnd
            }, this.isSelected = function() {
                return n && q.getCaret() !== q.getCaretEnd()
            };
            var z = function() {
                var a = q.getValue(),
                    b = f.create("box", a);
                return b ? (b.inject(i, "before"), q.setValue([null, "", null]), b) : null
            };
            this.toBox = z
        }
        this.toElement = function() {
            return i
        }, this.focus = t, this.blur = u, this.remove = v, this.inject = s, this.show = w, this.hide = x, this.fireBitEvent = y, r()
    };
    var b = function(a) {
            return !(!a && 0 !== a)
        },
        c = function(b) {
            return a.isArray(b) ? b : [b]
        },
        d = function(a) {
            return a.replace(/-\D/g, function(a) {
                return a.charAt(1).toUpperCase()
            })
        },
        e = function(a) {
            return a.replace(/\b[a-z]/g, function(a) {
                return a.toUpperCase()
            })
        };
    a.fn.extend({
        textboxlist: function(b) {
            return this.each(function() {
                new a.TextboxList(this, b)
            })
        }
    })
}(jQuery),
function() {
    $.TextboxList.Autocomplete = function(b, c) {
        var d, e, f, g, h, i, j, k, l, m, n, o = [],
            p = [],
            q = !1,
            r = $.extend(!0, {
                minLength: 1,
                maxResults: 10,
                insensitive: !0,
                highlight: !0,
                highlightSelector: null,
                mouseInteraction: !0,
                onlyFromValues: !1,
                focusFirst: !1,
                queryRemote: !1,
                remote: {
                    url: "",
                    param: "search",
                    extraParams: {},
                    loadPlaceholder: "Please wait..."
                },
                method: "standard",
                placeholder: "Type to receive suggestions"
            }, c),
            s = function() {
                b.addEvent("bitEditableAdd", t).addEvent("bitEditableFocus", u).addEvent("bitEditableBlur", x).setOptions({
                    bitsOptions: {
                        editable: {
                            addKeys: !1,
                            stopEnter: !1
                        }
                    }
                }), e = b.getOptions().prefix + "-autocomplete", f = $.TextboxList.Autocomplete.Methods[r.method], g = $('<div class="dropdown-menu ' + e + '" />').width(b.getContainer().width()).appendTo(b.getContainer()), a(r.placeholder) && (q = $('<div class="' + e + '-placeholder" />').html(r.placeholder).appendTo(g)), h = $('<ul class="' + e + '-results" />').appendTo(g).click(function(a) {
                    a.stopPropagation(), a.preventDefault()
                })
            },
            t = function(a) {
                a.toElement().keydown(F).keyup(function(a) {
                    27 !== a.which && u()
                })
            },
            u = function(a) {
                if (a && (j = a), r.queryRemote || o.length) {
                    var b = $.trim(j.getValue()[1]);
                    if (b.length < r.minLength && y(), b != m && (m = b, h.parent().css("display", "none"), !(b.length < r.minLength))) {
                        if (r.queryRemote)
                            if (p[b]) o = p[b];
                            else {
                                var c = r.remote.extraParams;
                                c[r.remote.param] = b, n && n.abort(), n = $.ajax({
                                    url: r.remote.url,
                                    data: c,
                                    dataType: "json",
                                    success: function(a) {
                                        p[b] = a, o = a, v(b)
                                    }
                                })
                            }
                        v(b)
                    }
                }
            },
            v = function(a) {
                var c = f.filter(o, a, r.insensitive, r.maxResults);
                b.getOptions().unique && (c = $.grep(c, function(a) {
                    return -1 == b.isDuplicate(a)
                })), z(), B(), c.length && (h.empty().parent().css("display", "block"), $.each(c, function(b, c) {
                    w(c, a)
                }), (r.onlyFromValues || r.focusFirst) && C(), c = c, HS.Controller.StateMachine && HS.Controller.StateMachine.escapeStack && HS.stack.opened("CC:BCC-Autocomplete", function() {
                    x()
                }, null, this))
            },
            w = function(a, b) {
                var c = $('<li class="' + e + '-result" />').html(a[3] ? a[3] : a[1]).data("textboxlist:auto:value", a);
                c.appendTo(h), r.highlight && $(r.highlightSelector ? c.find(r.highlightSelector) : c).each(function() {
                    $(this).html() && f.highlight($(this), b, r.insensitive, e + "-highlight")
                }), r.mouseInteraction && (c.css("cursor", "pointer").hover(function() {
                    A(c)
                }).mousedown(function(a) {
                    a.stopPropagation(), a.preventDefault(), clearTimeout(k), l = !0
                }).mouseup(function() {
                    l && (E(), j.focus(), u(), l = !1)
                }), r.onlyFromValues || c.mouseleave(function() {
                    i && i.get(0) == c.get(0) && B()
                }))
            },
            x = function() {
                k = setTimeout(function() {
                    z(), h.parent().css("display", "none"), m = null
                }, $.browser.msie ? 150 : 0), HS.Controller.StateMachine && HS.Controller.StateMachine.escapeStack && HS.stack.closed("CC:BCC-Autocomplete")
            },
            y = function() {
                q && q.css("display", "block")
            },
            z = function() {
                q && q.css("display", "none")
            },
            A = function(a) {
                a && a.length && (B(), i = a.addClass(e + "-result-focus"))
            },
            B = function() {
                i && i.length && (i.removeClass(e + "-result-focus"), i = null)
            },
            C = function() {
                return A(h.find(":first"))
            },
            D = function(a) {
                return i && i.length ? A(i[a]()) : self
            },
            E = function() {
                var a = i.data("textboxlist:auto:value"),
                    c = b.create("box", a.slice(0, 3));
                return c && (c.autoValue = a, $.isArray(d) && d.push(a), j.setValue([null, "", null]), c.inject(j.toElement(), "before")), B(), self
            },
            F = function(a) {
                var c = function() {
                    a.stopPropagation(), a.preventDefault()
                };
                switch (a.which) {
                    case 8:
                        B();
                        break;
                    case 38:
                        c(), !r.onlyFromValues && i && i.get(0) === h.find(":first").get(0) ? B() : D("prev");
                        break;
                    case 40:
                        c(), i && i.length ? D("next") : C();
                        break;
                    case 13:
                    case 188:
                        if (c(), i && i.length) E();
                        else if (!r.onlyFromValues) {
                            var d = j.getValue(),
                                e = b.create("box", d);
                            e && (e.inject(j.toElement(), "before"), j.setValue([null, "", null]))
                        }
                }
            };
        this.setValues = function(a) {
            o = a
        }, s()
    }, $.TextboxList.Autocomplete.Methods = {
        standard: {
            filter: function(a, c, d, e) {
                for (var f = [], g = new RegExp("\\b" + b(c), d ? "i" : ""), h = 0; h < a.length && f.length !== e; h++) g.test(a[h][1]) && f.push(a[h]);
                return f
            },
            highlight: function(a, c, d, e) {
                var f = new RegExp("(<[^>]*>)|(\\b" + b(c) + ")", d ? "ig" : "g");
                return a.html(a.html().replace(f, function(a, b, c) {
                    return "<" == a.charAt(0) ? a : '<strong class="' + e + '">' + c + "</strong>"
                }))
            }
        }
    };
    var a = function(a) {
            return !(!a && 0 !== a)
        },
        b = function(a) {
            return a.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1")
        }
}(), $.TextboxList.Autocomplete.Methods.binary = {
        filter: function(a, b, c, d) {
            var e = c ? "toLowerCase" : "toString",
                f = 0,
                g = a.length - 1;
            for (b = b[e](); g >= f;) {
                var h = parseInt((f + g) / 2),
                    i = a[h][1].substr(0, b.length)[e](),
                    j = b == i ? 0 : b > i ? 1 : -1;
                if (0 > j) g = h - 1;
                else if (j > 0) f = h + 1;
                else if (0 === j) break
            }
            if (f > g) return [];
            for (var k, l, m = [a[h]], n = !0, o = !0, p = 1; p <= a.length - h && m.length !== d && (n && (k = a[h + p] ? a[h + p][1].substr(0, b.length)[e]() : !1), o && (l = a[h - p] ? a[h - p][1].substr(0, b.length)[e]() : !1), n = o = !1, k === b && (m.push(a[h + p]), n = !0), l === b && (m.unshift(a[h - p]), o = !0), n || o); p++);
            return m
        },
        highlight: function(a, b, c, d) {
            var e = new RegExp("(<[^>]*>)|(\\b" + b.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1") + ")", c ? "ig" : "g");
            return a.html(a.html().replace(e, function(a, b, c) {
                return "<" == a.charAt(0) ? a : '<strong class="' + d + '">' + c + "</strong>"
            }))
        }
    },
    function(a) {
        var b = new function() {
            this.countRegexp = function(a, b) {
                var c = a.match(b);
                return c ? c.length : 0
            }, this.getStrength = function(a, b) {
                var c = a.length;
                if (b > c) return 0;
                var d = this.countRegexp(a, /\d/g),
                    e = this.countRegexp(a, /[a-z]/g),
                    f = this.countRegexp(a, /[A-Z]/g),
                    g = c - d - e - f;
                if (d == c || e == c || f == c || g == c) return 1;
                var h = 0;
                return d && (h += 2), e && (h += f ? 4 : 3), f && (h += e ? 4 : 3), g && (h += 5), c > 12 && (h += 5), h
            }, this.getStrengthLevel = function(a, b) {
                var c = this.getStrength(a, b);
                return 4 >= c ? "weak" : 12 >= c ? "good" : c > 12 ? "strong" : "error"
            }
        };
        a.fn.passwordstrength = function(c) {
            var d = a.extend({
                minLength: 6
            }, c);
            return this.each(function() {
                a(this).bind("change keyup", function() {
                    var c, e = a(this).val();
                    a(".password-strength").hide(), e.length > 0 && (c = b.getStrengthLevel(e, d.minLength), a("#password-" + c).show())
                })
            })
        }
    }(jQuery);